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

时间:2015-04-09 10:29:32

标签: java jsp tomcat jstl el

我试图测试一个简单的webapp来处理一个只支持servlet api 2.3的servlet容器。不幸的是,我无法访问2.3容器,所以我尝试了最新版本的tomcat。

我有以下设置:

  • Tomcat 7,它具有servlet api 3.0且没有标准的JSTL支持
  • 在我的web.xml中我宣布使用servlet 2.3:

<!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})。

3 个答案:

答案 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.jarstandard.jar WEB-INF / lib文件夹。