gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:06:22 24 4
gpt4 key购买 nike

我正在尝试测试一个简单的 web 应用程序以在仅支持 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} 不显示为“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 向后兼容,我是否配置错误?

注意:页面的实际加载和一般的 webapp 工作正常,只有 EL (${something}) 不计算。

最佳答案

如果您使用的是 2.3 版或早于 2.3 版的 servlet,那么 EL 默认情况下是禁用的,因此您必须启用它意味着默认情况下它是 true :

isELIgnored ="true"

你必须让它为假。

但如果您使用的 servlet 版本高于 2.3,那么默认情况下它是启用的

isELIgnored ="假"

你可以启用或禁用

<%@ page isELIgnored ="true|false" %> 

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

关于java - EL 在 jsp 中不工作,servlet api 之间可能不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29536019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com