我试图测试一个简单的webapp来处理一个只支持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" >
在我的一个maven依赖项中,我添加了jstl库,因此它现在位于我的类路径中:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
不幸的是,我的EL不起作用,它们只是按原样渲染。例如:$ {2 + 2}未显示为&#34; 4&#34;。这是我的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,是否有使用2.3的旧版tomcat?或者servlet 3.0向后兼容,我错误配置了什么?
注意:页面和网页应用的实际加载工作正常,只有不评估的EL($ {something})。
答案 0 :(得分:3)
如果您使用的是版本2.3或2.3之前的版本,则默认情况下禁用EL,因此您必须启用它,默认情况下它为真:
isELIgnored ="true"
你必须把它弄错。
但如果您使用的是比2.3更高版本的servlet,则默认情况下启用它意味着
isELIgnored ="false"
您可以通过
启用或停用<%@ page isELIgnored ="true|false" %>
一次只能给出true or false
一个值。如果为真,EL表达式在静态文本或标记属性中出现时会被忽略。如果为false,则由容器评估EL表达式。
答案 1 :(得分:1)
在页面标记中使用isELIgnored
<%@ page language="java"
contentType="text/html;
charset=ISO-8859-1" pageEncoding="ISO-8859-1"
isELIgnored="false"%>
答案 2 :(得分:0)
首先检查您是否有正确版本的jstl.jar
和standard.jar
WEB-INF / lib文件夹。