EL 表达式未在 JSP 中计算
EL expressions not evaluated in JSP
我的 servlets/jsp 网络应用程序有一个小问题。我正在尝试在 jsp 页面中使用 jstl。例如,当我使用任何标签时:
<c:out value="${command}"/>
它告诉我
${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"; >
从 web.xml
中删除 <!DOCTYPE>
并确保 <web-app>
被声明为符合 Servlet 2.4 或更新版本并且一切正常。
兼容 web.xml
的有效 Servlet 3.0(Tomcat 7、JBoss AS 6-7、GlassFish 3 等) 其整体如下所示, 没有任何 <!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 modus,否则 EL 表达式将无法在 webapp 中工作。
如果 web.xml
中仍然有 Servlet 2.3 或更早版本 <!DOCTYPE>
或 <web-app>
,即使您已经有 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 中,它与 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
对于 web.xml 文件(version="3.0"),我必须 运行 Tomcat 服务器 v.8 而不是 v.7 上的应用程序,否则我和你有同样的问题。希望这对某人有所帮助...
<?xml version="1.0" encoding="ISO-8859-1" ?>
<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">
设置页面顶部的 <%@ page isELIgnored="false" %>
对我很有帮助。不知道为什么这是我的问题的根源。还不清楚为什么。
尝试将 jdbc 驱动程序 class 放在 WEB-INF -> lib 文件夹中,并验证使用的 servlet 和 jar 文件的版本。就我而言,我使用了 mssql-jdbc-8.2.2.jar 并在 pom.xml
中进行了更新
我的 JSP 页面也无法识别 。始终执行错误条件,即 。这就是正在发生的事情。
这是一个内部 JSP 页面,即
<jsp:include page="your-inner-page.jsp"/>
内部 JSP 首先加载,没有以下标签库。它们被放在外面 JSP。将它们添加到内部对我有用。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
我的 servlets/jsp 网络应用程序有一个小问题。我正在尝试在 jsp 页面中使用 jstl。例如,当我使用任何标签时:
<c:out value="${command}"/>
它告诉我
${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"; >
从 web.xml
中删除 <!DOCTYPE>
并确保 <web-app>
被声明为符合 Servlet 2.4 或更新版本并且一切正常。
兼容 web.xml
的有效 Servlet 3.0(Tomcat 7、JBoss AS 6-7、GlassFish 3 等) 其整体如下所示, 没有任何 <!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 modus,否则 EL 表达式将无法在 webapp 中工作。
如果 web.xml
中仍然有 Servlet 2.3 或更早版本 <!DOCTYPE>
或 <web-app>
,即使您已经有 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 中,它与 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
对于 web.xml 文件(version="3.0"),我必须 运行 Tomcat 服务器 v.8 而不是 v.7 上的应用程序,否则我和你有同样的问题。希望这对某人有所帮助...
<?xml version="1.0" encoding="ISO-8859-1" ?>
<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">
设置页面顶部的 <%@ page isELIgnored="false" %>
对我很有帮助。不知道为什么这是我的问题的根源。还不清楚为什么。
尝试将 jdbc 驱动程序 class 放在 WEB-INF -> lib 文件夹中,并验证使用的 servlet 和 jar 文件的版本。就我而言,我使用了 mssql-jdbc-8.2.2.jar 并在 pom.xml
中进行了更新我的 JSP 页面也无法识别
这是一个内部 JSP 页面,即
<jsp:include page="your-inner-page.jsp"/>
内部 JSP 首先加载,没有以下标签库。它们被放在外面 JSP。将它们添加到内部对我有用。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>