Java EL在jsp中不工作,servlet api之间可能不匹配?
我正在尝试测试一个简单的webapp,以在一个只支持servlet api 2.3的servlet容器上工作。不幸的是,我还没有访问2.3容器的权限,所以我尝试在tomcat的最新版本上进行测试 我有以下设置: Tomcat7,它有ServletAPI3.0,没有标准的JSTL支持 在my web.xml中,我声明使用servlet 2.3: 在我的一个maven依赖项中,我添加了jstl库,因此它现在位于我的类路径上: javax.servlet jstl 1.2 不幸的是,我的EL不起作用,它们只是按原样渲染。例如:${2+2}未显示为4。以下是我的jsp页面的一个片段:Java EL在jsp中不工作,servlet api之间可能不匹配?,java,jsp,tomcat,jstl,el,Java,Jsp,Tomcat,Jstl,El,我正在尝试测试一个简单的webapp,以在一个只支持servlet api 2.3的servlet容器上工作。不幸的是,我还没有访问2.3容器的权限,所以我尝试在tomcat的最新版本上进行测试 我有以下设置: Tomcat7,它有ServletAPI3.0,没有标准的JSTL支持 在my web.xml中,我声明使用servlet 2.3: 在我的一个maven依赖项中,我添加了jstl库,因此它现在位于我的类路径上: javax.servlet jstl 1.2 不幸的是,我的EL不起作
<%@ 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?还是Servlet3.0向后兼容?我是否误解了什么
注意:页面和webapp的实际加载通常可以正常工作,只有EL${something}没有计算。使用页面标记中的IsAligned
<%@ page language="java"
contentType="text/html;
charset=ISO-8859-1" pageEncoding="ISO-8859-1"
isELIgnored="false"%>
在页面标记中使用IsAligned
<%@ page language="java"
contentType="text/html;
charset=ISO-8859-1" pageEncoding="ISO-8859-1"
isELIgnored="false"%>
首先检查jstl.jar和standard.jar WEB-INF/lib文件夹的版本是否正确。首先检查jstl.jar和standard.jar WEB-INF/lib文件夹的版本是否正确。如果您使用的是servlet版本2.3或低于2.3,则默认情况下EL被禁用,因此您必须启用它,这意味着默认情况下它是正确的: 已对齐=真 你必须把它弄错 但是,如果您使用的是比2.3更高版本的servlet,那么默认情况下它是启用的 未对齐=错误 您可以通过以下方式启用或删除
<%@ page isELIgnored ="true|false" %>
一次只能给出一个值true或false。如果为true,则EL表达式在静态文本或标记属性中出现时将被忽略。如果为false,容器将对EL表达式求值。如果您使用的是servlet 2.3版或2.3版之前的版本,则默认情况下EL被禁用,因此您必须启用它,这意味着默认情况下EL为true,如下所示: 已对齐=真 你必须把它弄错 但是,如果您使用的是比2.3更高版本的servlet,那么默认情况下它是启用的 未对齐=错误 您可以通过以下方式启用或删除
<%@ page isELIgnored ="true|false" %>
一次只能给出一个值true或false。如果为true,则EL表达式在静态文本或标记属性中出现时将被忽略。如果为false,EL表达式将由容器计算。否,我的lib文件夹中没有任何内容。出于编译的原因,我使用maven依赖项,运行时使用tomcat/lib。我很确定我已经得到了所有必需的JSP,因为它现在可以工作了。请看其他答案,它们不在我的web inf/libNo中,我的lib文件夹中没有任何内容。出于编译的原因,我使用maven依赖项,运行时使用tomcat/lib。我非常确定我已经得到了所有必需的JSP,因为它现在可以工作了。看到其他答案,它们只是不在我的web inf/lib中