JSP中未计算EL表达式

qaxu7uf2  于 2022-12-16  发布在  其他
关注(0)|答案(5)|浏览(152)

我的servlet/jsp web应用程序有个小问题。我尝试在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);

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

o0lyfsai

o0lyfsai1#

是的,我在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或更高版本,并且一切正常。
一个有效的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-26、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中工作。
如果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中,JSP 2.0与Servlet 2.4沿着使用。因此,如果您的web.xml被声明为以Servlet 2.3或更早版本的方式运行Web应用程序,则JSP将期望在JSTL库中找到EL。但如果是缺少EL的较新JSTL版本,则会失败。

另请参见:

fcg9iug3

fcg9iug32#

在我的web.xml文件(版本=“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">
w7t8yxp5

w7t8yxp53#

在页面顶部设置<%@ page isELIgnored="false" %>对我有帮助。不知道为什么它是我的问题的根源。还不清楚为什么。

nwwlzxa7

nwwlzxa74#

尝试将jdbc驱动程序类放在WEB-INF -〉lib文件夹中,并验证所使用的servlet和jar文件的版本。

67up9zun

67up9zun5#

我的JSP页面也不能识别<c:choose></:choose>。总是执行错误的条件,即<c:otherwise>这是正在发生的事情。
这是一个内部JSP页面,即

<jsp:include page="your-inner-page.jsp"/>

内部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" %>

相关问题