【问题标题】:Expression Language in JSP not working [duplicate]JSP中的表达式语言不起作用[重复]
【发布时间】: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 不起作用。

【问题讨论】:

    标签: java jsp el


    【解决方案1】:

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

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

    1. 有问题的应用服务器不支持 JSP 2.0。
    2. web.xml 未声明为 Servlet 2.4 或更高版本。
    3. @page 配置了isELIgnored=true
    4. 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。我需要改变两件事:

    1. 在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">
      
    2. 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;?!

      【讨论】:

        猜你喜欢
        • 2012-01-05
        • 1970-01-01
        • 2021-04-27
        • 2014-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        相关资源
        最近更新 更多