EL表达式未在JSP中评估

时间:2015-05-06 15:14:06

标签: jsp jstl el web.xml

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

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

它告诉我

${command} 

在我的浏览器中而不是参数&#39;命令&#39;值。我正在使用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 part:

<%@ 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);

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

4 个答案:

答案 0 :(得分:27)

  

是的,我在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

<!DOCTYPE>删除web.xml,一切都应该正常。与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/9/10/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,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>

当使用JSTL 1.1或更新版本时,您需要确保以这样的方式声明您的web.xml,使得webapp至少以Servlet 2.4模式运行,否则EL表达式将无法在webapp中运行。

<!DOCTYPE>中仍然有Servlet 2.3或更早版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中,后者与Servlet 2.4一起使用。因此,如果声明您的web.xml在Servlet 2.3或更旧版本中运行webapp,那么JSP会期望在JSTL库中找到EL,但如果它是一个较新的JSTL版本,缺少EL,则会失败。 / p>

另见:

答案 1 :(得分:1)

就我的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">

答案 2 :(得分:-1)

尝试将jdbc驱动程序类放置在WEB-INF-> lib文件夹中,并验证所使用的servlet和jar文件的版本。就我而言,我使用了mssql-jdbc-8.2.2.jar并在pom.xml中更新了它

答案 3 :(得分:-1)

我的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" %>