EL 表达式不会在 Tomcat 5.5 中执行,但在 tomcat 6.0.20 中工作

2022-09-03 04:18:14

我正在使用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>

现在,当我将此执行到Windows平台时,我有tomcat 6.0.20,ognl 2.6.11,它给了我我想要的确切输出:

117 eth1

118 eth1

119 eth0

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

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

任何人都可以有解决方案,ognl表达式版本和tomcat版本应该有什么问题?

提前致谢...


答案 1

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

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

换句话说,EL 表达式根本不会被计算出来,而是显示为纯文本?这可能有以下一个或多个原因:

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

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会回退到兼容性最低的模式。您需要重新声明为Servlet 2.4,以便它可以在Tomcat 5.5和6.0中工作。声明应如下所示:web.xml

<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>

答案 2

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

这些链接将帮助您:

如何设置Tomcat与JSTL一起工作

如何在 Web 应用程序中引用和使用 jstl