JSP中的表达式语言不起作用[重复]
Posted
技术标签:
【中文标题】JSP中的表达式语言不起作用[重复]【英文标题】:Expression Language in JSP not working [duplicate] 【发布时间】:2011-01-11 05:57:31 【问题描述】:我是 JSP 新手并使用表达式语言。我正在使用带有 2.5 版和 Tomcat 6 服务器的 Eclipse Galileo。我只是想问一下,我的简单表达式语言不会像我写 $1>2
那样打印 vale,这应该是假的,但它仅在呈现页面时才显示 $1>2
。但是当我使用<c:out value="$1>2"/>
时,它会正确打印错误。我认为标签库存在问题。请告诉我这样做的原因,我为此提供了一个示例代码,以便您了解我哪里出错了:-
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Expression Language Example</title>
</head>
<body>
Is 1 greater than 2 using cout :<c:out value="$1>2"/>
Is 1 greater than 2 without using cout: $1>2
</body>
</html>
更新根据答案,这里有更多信息:
我正在向我的web.xml
展示它的样子:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>ScriptLessJsp</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>ElServlet</display-name>
<servlet-name>ElServlet</servlet-name>
<servlet-class>com.servlet.El.ElServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ElServlet</servlet-name>
<url-pattern>/ElServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>Collections</display-name>
<servlet-name>Collections</servlet-name>
<servlet-class>com.servlet.El.Collections</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Collections</servlet-name>
<url-pattern>/go</url-pattern>
</servlet-mapping>
</web-app>
在我的 lib 文件夹中,我只添加了 jstl.jar
,这样我就可以使用 <c:out>
标签来显示,但我的模板文本 EL 不起作用。
【问题讨论】:
【参考方案1】:我引用了我之前提供的answer EL 不工作的问题:
换句话说,EL 表达式没有被评估?这可能有以下一种或多种原因:
有问题的应用服务器不支持 JSP 2.0。
web.xml
未声明为 Servlet 2.4 或更高版本。@page
配置了isELIgnored=true
。 web.xml 在<jsp-config>
中配置了<el-ignored>true</el-ignored>
。
在您的特定情况下,EL 在标记库中工作,但不在模板文本中,所以我怀疑它是由第 2 点引起的。确保您的 web.xml
声明为至少 Servlet 2.4。由于 Tomcat 6.0 支持 Servlet 2.5,我建议您将 web.xml
声明为 Servlet 2.5:
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="Your_WebApp_ID"
version="2.5">
<!-- Here you go. -->
</web-app>
我看到的另一个罕见原因是在类路径中与 EL JAR 发生冲突。确保您没有将任何特定于应用服务器的 JAR 文件复制到您的 web 应用的 WEB-INF/lib
或更糟糕的 JRE/lib
中。
由于您已经在使用 Eclipse 和 Tomcat,因此我将回顾一下您用于这一切的开发步骤。确保您使用的是“Eclipse for Java EE 开发人员”,并且您已将 Tomcat 实例集成到 Eclipse 的 Servers 视图中,并且您已创建了一个 动态 Web 项目 设置为使用 Tomcat 实例的“Servlet 2.5”。这样,一切都应该自动进行(Eclipse 将在构建路径本身中获取 appserver 的库并自动生成符合 Servlet 2.5 的web.xml
)。
更新: 根据您的更新:那些 com.servlet.El
servlet 看起来很可疑。他们具体是做什么的?解析EL?删除它们并重试。
【讨论】:
我还注意到不应将 servlet 命名为“jsp”、“default”、“ssi”、“cgi”——这样命名也会破坏 JSP 功能,因为它们是内置的Tomcat servlet。 @BalusC.. 我遇到了同样的问题。我可以用你的 web.xml 修改解决方案来解决它.. 非常感谢.. 添加 也是有意义的,它只对我有帮助!!!!雄猫 7,Java 8 是的。我的 web.xml 版本是 2.3。谢谢楼主!【参考方案2】:在页面顶部设置<%@ page isELIgnored="false" %>
对我有帮助。不知道为什么这是我的问题的根源。尚不清楚原因
【讨论】:
您的解决方案太棒了。在尝试了很多其他选择之后。你的对我有用 谢谢。它适用于我的情况。 天哪。这有效:) 非常感谢您节省了我的时间。【参考方案3】:就我而言,我通过 maven 原型生成器生成了一个 webapp,我使用 maven-archetype-webapp。我需要改变两件事:
在web.xml中,将head改为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
eclipse默认生成带有head的jsp文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
删除它。
【讨论】:
我在旧的 Tomcat 5.5 中遇到了问题,并通过从 web-app 2.5 升级到 2.4 解决了这个问题 解决了 2_5.xsd 和 version="2.5" 非常感谢【参考方案4】:BalusC covers it,但我会添加这些 cmets:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
JSTL TLD 命名空间应该包含一个“jsp”(如上)。鉴于此命名空间错误可能是由于遵循旧的说明,请检查最新的文档以确保您没有在 WEB-INF/lib
中包含任何过时的库。许多过去是独立的技术现在都包含在容器中(EL 语言就是其中之一)。
顺便说一句,我通常会使用像 gt
instead of >
and lt
instead of <
这样的关键字——这对 XML 及其同类更友好。
【讨论】:
【参考方案5】:我的 JSP 中的 <!DOCTYPE html>
行有问题,以 eclipse 开头的 tomcat 没有正确解释 EL。使用 war 并将其复制到 webapps
文件夹,然后使用命令行启动 tomcat 就可以了。
那么显然eclipse tomcat插件有问题<!DOCTYPE html>
?!
【讨论】:
以上是关于JSP中的表达式语言不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章