2009-11-12 28 views
15

我开发使用弹簧web的MVC我的应用程序...EL表达式不会在Tomcat 5.5上执行,但在Tomcat的工作6.0.20

现在我的控制器,它返回这样的:

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部署war文件(百分之OS)平台,在这里我已经在使用Tomcat 5.5,OGNL表达式没有得到执行,并给我输出如下:

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

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

在此先感谢...

回答

33

但是,当我部署在Unix中(CentOS的)战争文件的平台,在这里我已经在使用Tomcat 5.5,EL表达式不会得到执行,并给我输出像:

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

换句话说,EL表达式根本没有得到评估,并显示为纯文本?这可以有以下原因之一或更多:问题

  1. 应用服务器不支持JSP 2.0。
  2. web.xml未声明为Servlet 2.4或更高版本。
  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将回退到最少的兼容性模式,一切都将变得混乱。您需要重新声明web.xmlServlet 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> 
+0

得到了解决方案BalusC ....非常感谢您的回答...其实我为我的tomcat 6.0.20宣布Servlet 2.5。正如你告诉我的,我已经将它改为Servlet 2.4,一切工作正常...... – Nirmal 2009-11-12 12:38:54

+0

不客气。 – BalusC 2009-11-12 12:43:57

+0

@BalusC非常感谢。我花了很多时间从JasperException中恢复。最后我得到了这个。我已经通过示例'web.xml'声明解决了我的问题。并添加'jstl.jar'和'standard.jar'。为'web.xml'+1。 – OO7 2014-08-20 05:34:05

1

你确定你已经包含JSTL库无论是在Tomcat或Web应用程序的lib文件夹?

这些链接将帮助您:

How to set up Tomcat to work with JSTL

How to reference and use jstl in your web application

+0

如果JSTL没有在HTML安装,你应该已经看到了*不*在视觉输出和一切(未解析/未评估)资源。 – BalusC 2009-11-12 11:49:43

+0

我有JSTL在我的类路径..这就是为什么我得到的输出窗口中使用Tomcat 6.0.20 ..我知道... – Nirmal 2009-11-12 11:58:48

+0

它不会在工作,如果JSTL在Tomcat的6.0的类路径,但不Tomcat 5.5的类路径。你显然拥有它,或者它在webapp的类路径中,那么它将适用于所有环境。但是,好的,如上所述,这不是问题的根源。 – BalusC 2009-11-12 12:26:22

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/