【问题标题】:EL expressions won't executed in Tomcat 5.5, but working in tomcat 6.0.20EL 表达式不会在 Tomcat 5.5 中执行,但可以在 Tomcat 6.0.20 中执行
【发布时间】:2010-12-15 20:15:50
【问题描述】:

我正在使用 spring-web-mvc 开发我的应用程序...

现在在我的控制器上它返回如下:

  public class InterfacesManageController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception  {

    Map<String, Object> myModel = new HashMap<String, Object>();

    myModel.put("interfacesList", this.interfacesSecurityProcessor.findByAll(0, null, null, null));

    return new ModelAndView("common", "model", myModel);
}

现在,我的 JSP 包含以下代码:

<c:forEach items="${model.interfacesList}" var="prod">
     <c:out value="${prod.id}"/> <c:out value="${prod.name}"/><br><br>
</c:forEach>

现在,当我在拥有 tomcat 6.0.20、ognl 2.6.11 的 Windows 平台上执行此操作时,它会给出我想要的准确输出:

117 eth1

118 eth1

119 eth0

但是,当我在具有 tomcat 5.5 的 unix (cent os) 平台上部署 war 文件时,ognl 表达式不会被执行并给我如下输出:

${prod.id} ${prod.name}

谁能有解决方案,ognl表达式版本和tomcat版本应该是什么问题?

提前谢谢...

【问题讨论】:

    标签: java jsp tomcat el


    【解决方案1】:

    感谢 BalusC 的出色回答。我遇到了他在上面诊断出的完全相同的问题,他的解决方案让我成功了。但是,我还必须确保我的应用程序的各种 JSP 和 JSTL 依赖项都兼容。特别是,我引用的是 JSTL 1.2,直到我将该依赖项更改为 JSTL 1.1.2(此时我还必须添加对 taglibs.standard:1.1.2 的显式依赖项),这个问题才消失。

    以下博客文章提供了有关不同版本之间兼容性的更多信息:http://www.mularien.com/blog/2008/04/24/how-to-reference-and-use-jstl-in-your-web-application/

    【讨论】:

      【解决方案2】:

      但是,当我在具有 Tomcat 5.5 的 Unix (CentOS) 平台上部署 war 文件时,EL 表达式不会被执行并给我如下输出:

      ${prod.id} ${prod.name}
      

      换句话说,EL 表达式根本没有被评估并且显示为纯文本?这可能有以下一种或多种原因:

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

      Tomcat 5.5 是 Servlet 2.4/JSP 2.0,所以 #1 可以从头开始。我假设在部署之前您没有更改 webapp 中的任何内容,因此 #3 和 #4 可能会被划伤。现在离开#2。也许您将其声明为 Tomcat 6.0 的 Servlet 2.5,而 Tomcat 5.5 只能理解 Servlet 2.4。这样一来,一切都会变得一团糟,因为 Tomcat 会退回到兼容性最低的模式。您需要将web.xml 重新声明为Servlet 2.4,以便它可以在Tomcat 5.5 和6.0 中运行。声明应如下所示:

      <web-app
          xmlns="http://java.sun.com/xml/ns/j2ee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
          version="2.4">
      
          <!-- Here you go. -->
      
      </web-app>
      

      【讨论】:

      • 得到了解决方案 BalusC.... 非常感谢您的回答...实际上我为我的 tomcat 6.0.20 声明了 Servlet 2.5。正如你告诉我的,我已将其更改为 Servlet 2.4,一切正常...
      • @BalusC 非常感谢。我花了很多时间从 JasperException 中恢复过来。最后我得到了这个。我已经用你的样本web.xml 声明解决了我的问题。并添加jstl.jarstandard.jar。 +1 web.xml
      【解决方案3】:

      您确定在 Tomcat 或 Web 应用程序的 lib 文件夹中包含 JSTL 库吗?

      这些链接将对您有所帮助:

      How to set up Tomcat to work with JSTL

      How to reference and use jstl in your web application

      【讨论】:

      • 如果未安装 JSTL,您应该在可视输出中看到 nothing 并在 HTML 源代码中看到所有内容(未解析/未评估)。
      • 我的类路径中确实有 JSTL。这就是为什么我在使用 tomcat 6.0.20 的 Windows 中获得输出的原因。我确定...
      • 如果 JSTL 在 Tomcat 6.0 的类路径中,但不在 Tomcat 5.5 的类路径中,它就不会起作用。您显然拥有它,或者它位于 webapp 的类路径中,那么它将适用于所有环境。但是好的,正如所说,这不是问题的根本原因。
      猜你喜欢
      • 1970-01-01
      • 2013-02-20
      • 2015-01-07
      • 2012-09-14
      • 1970-01-01
      • 2012-02-16
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多