我的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);
请告诉我,我做错了什么!谢谢!
5条答案
按热度按时间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>
:对于Servlet 3.1(Tomcat 8、WildFly 8-11、GlassFish/Payara 4等),其外观如下所示:
对于Servlet 4.0(Tomcat 9、WildFly 12-21、GlassFish/Payara 5等),它如下所示:
对于Servlet 5.0(Tomcat 10、WildFly 22-26、GlassFish/Payara 6等),它如下所示:
当使用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版本,则会失败。另请参见:
fcg9iug32#
在我的web.xml文件(版本=“3.0”)的情况下,我必须在Tomcat服务器v.8而不是v.7上运行应用程序,否则我会遇到与您相同的问题。
w7t8yxp53#
在页面顶部设置
<%@ page isELIgnored="false" %>
对我有帮助。不知道为什么它是我的问题的根源。还不清楚为什么。nwwlzxa74#
尝试将jdbc驱动程序类放在WEB-INF -〉lib文件夹中,并验证所使用的servlet和jar文件的版本。
67up9zun5#
我的JSP页面也不能识别<c:choose></:choose>。总是执行错误的条件,即<c:otherwise>这是正在发生的事情。
这是一个内部JSP页面,即
内部JSP先加载,没有下面的标记库。它们被放在外部JSP上。把它们添加到内部JSP对我来说很有效。