gpt4 book ai didi

jsp - EL 表达式未在 JSP 中计算

转载 作者:行者123 更新时间:2023-12-03 21:15:37 25 4
gpt4 key购买 nike

我的 servlets/jsp Web 应用程序有一个小问题。我正在尝试在 jsp 页面中使用 jSTL。例如,当我使用任何标签时:

<c:out value="${command}"/>

它向我展示了
${command} 

在我的浏览器中而不是参数“命令”值。我正在使用 maven(我猜问题就在这里)。这是 pom xml 依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

我的 web.xml 声明标签:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

和jsp部分:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>

<head>
<title>Parsing results</title>
<link type="text/css" rel="stylesheet" href="css/page.css"/>
<link type="text/css" rel="stylesheet" href="css/table.css"/>
</head>

<body>
<h2 align="center">Results of
parsing. Parsing method = <c:out value="${command}"/></h2>.......

编辑:
设置命令值的代码很简单:
request.setAttribute("command", parser.getName());

然后去
request.getRequestDispatcher(redir).forward(request, response);

请告诉我,我做错了什么!
谢谢!

最佳答案

Yes, i have doctype in web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "java.sun.com/dtd/web-app_2_3.dtd"; >


删除 <!DOCTYPE>来自 web.xml并确保 <web-app>声明符合 Servlet 2.4 或更新版本,一切都应该很好。
有效的 Servlet 3.0(Tomcat 7、JBoss AS 6-7、GlassFish 3 等)兼容 web.xml看起来像下面 全部 , 没有任何 <!DOCTYPE> :
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

<!-- Config here. -->

</web-app>
对于 Servlet 3.1(Tomcat 8、WildFly 8-11、GlassFish/Payara 4 等),它如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

<!-- Config here. -->

</web-app>
对于 Servlet 4.0(Tomcat 9、WildFly 12-21、GlassFish/Payara 5 等),它如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">

<!-- Config here. -->

</web-app>
对于 Servlet 5.0(Tomcat 10、WildFly 22、GlassFish/Payara 6 等),它如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">

<!-- Config here. -->

</web-app>
使用 JSTL 1.1 或更新版本时,您需要确保您的 web.xml以 webapp 在 中运行的方式声明至少 Servlet 2.4 模式,否则 EL 表达式将无法在 webapp 中工作。
当仍然拥有 Servlet 2.3 或更早版本时 <!DOCTYPE><web-app>web.xml ,即使您已经拥有 Servlet 2.4 或更新的 XSD,它仍将被迫在 Servlet 2.3 或更旧的模式中运行,从而导致 EL 表达式失败。
技术原因是,EL 最初是 JSTL 1.0 的一部分,在 Servlet 2.3/JSP 1.2 及更早版本中不可用。在 JSTL 1.1 中,EL 从 JSTL 中删除并集成到 JSP 2.0 中,JSP 2.0 与 Servlet 2.4 一起使用。所以,如果您的 web.xml声明以 Servlet 2.3 或更旧的方式运行 webapp,那么 JSP 会期望在 JSTL 库中找到 EL,但是如果它是较新的 JSTL 版本,缺少 EL,这反过来会失败。
也可以看看:
  • Difference between JSP EL, JSF EL and Unified EL - 关于EL的历史
  • Our JSTL wiki page
  • 关于jsp - EL 表达式未在 JSP 中计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30080810/

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