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,这样我就可以使用 &lt;c:out&gt; 标签来显示,但我的模板文本 EL 不起作用。

【问题讨论】:

【参考方案1】:

我引用了我之前提供的answer EL 不工作的问题:

换句话说,EL 表达式没有被评估?这可能有以下一种或多种原因:

    有问题的应用服务器不支持 JSP 2.0。 web.xml 未声明为 Servlet 2.4 或更高版本。 @page 配置了isELIgnored=true。 web.xml 在&lt;jsp-config&gt; 中配置了&lt;el-ignored&gt;true&lt;/el-ignored&gt;

在您的特定情况下,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】:

在页面顶部设置&lt;%@ page isELIgnored="false" %&gt; 对我有帮助。不知道为什么这是我的问题的根源。尚不清楚原因

【讨论】:

您的解决方案太棒了。在尝试了很多其他选择之后。你的对我有用 谢谢。它适用于我的情况。 天哪。这有效:) 非常感谢您节省了我的时间。【参考方案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 &gt; and lt instead of &lt; 这样的关键字——这对 XML 及其同类更友好。

【讨论】:

【参考方案5】:

我的 JSP 中的 &lt;!DOCTYPE html&gt; 行有问题,以 eclipse 开头的 tomcat 没有正确解释 EL。使用 war 并将其复制到 webapps 文件夹,然后使用命令行启动 tomcat 就可以了。

那么显然eclipse tomcat插件有问题&lt;!DOCTYPE html&gt;?!

【讨论】:

以上是关于JSP中的表达式语言不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JSP中的JSTL与EL表达式用法及区别

EL表达式语言

EL表达式

JSP中EL表达式的使用

Jsp第九课 EL表达式的学习和使用

[Java] JSP笔记 - ELJSTL 常用标签