EL 在 jsp 中不工作,servlet api 之间可能不匹配?

EL not working in jsp, possible mismatch between servlet api's?

我正在尝试测试一个简单的 Web 应用程序以在仅支持 servlet api 2.3 的 servlet 容器上运行。不幸的是,我还没有访问 2.3 容器的权限,所以我尝试在 tomcat.

的最新版本上进行测试

我有以下设置:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >

不幸的是,我的 EL 不起作用,它们只是按原样呈现。例如:${2+2} 不显示为“4”。这是我的 jsp 页面的片段:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<body>
    <h2>Hello World</h2>
    <c:out value="${2+2}"/>
</body>

</html>

所以我假设这是因为我的 web.xml 声明(说它是 2.3)不匹配,但我的实际 servlet 容器 (tomcat) 想要使用 3.0 和 jstl 1.2。如果我真的想让它工作,我可以更新我的 web.xml 以也使用 3.0 版。但是,这不适用于 2.3 的(其他)servlet 容器。所以我的问题是,如何测试我的 2.3 webapp,是否有旧版本的 tomcat 也使用 2.3?还是 servlet 3.0 向后兼容,我是不是配置有误?

注意:页面的实际加载和 web 应用程序通常工作正常,只有 EL (${something}) 不计算。

在页面标签

中使用 isELIgnored
<%@ page language="java" 
contentType="text/html; 
charset=ISO-8859-1" pageEncoding="ISO-8859-1"  
isELIgnored="false"%>

首先检查 jstl.jarstandard.jar WEB-INF/lib 文件夹的版本是否正确。

如果您使用的是 servlet 2.3 版或早于 2.3 版,则 EL 默认处于禁用状态,因此您必须启用它意味着默认情况下它是正确的:

isELIgnored ="true"

你必须让它变成假的。

但如果您使用的 servlet 版本高于 2.3,则默认情况下启用它意味着

isELIgnored ="false"

您可以通过

启用或禁用
<%@ page isELIgnored ="true|false" %> 

一次只能给一个值true or false。如果为真,EL 表达式出现在静态文本或标记属性中时将被忽略。如果为 false,则 EL 表达式由容器计算。