从JSPs调用Tomcat 7方法

时间:2014-02-25 05:48:18

标签: java jsp jstl tomcat7

我们有一个Web应用程序,现在需要从jsp文件中调用方法。 我们以前使用过Tomcat6,所以我们采取了以下步骤

  • 迁移到Tomcat 7
  • 在web.xml中声明Servlet版本3
  • 在我们的servlet.xml中公开bean

现在,通过{$bean.object}访问具有getter和setter的对象可以正常工作,但是通过{$bean.method}调用方法会引发以下错误

org.apache.jasper.JasperException: /WEB-INF/jsp/home.jspx (line: 15, column: 52) "${bean.method()}" contains invalid expression(s): de.odysseus.el.tree.TreeBuilderException: Error parsing '${bean.method()}': syntax error at position 29, encountered '(', expected '}'

我读到其他人遇到类似问题(例如here)。

虽然项目依赖于大量外部库,但是没有特定于servletcontainer的文件位于/WEB-INF/lib文件夹中。

我的问题是:

  • 如何确定某个库是否特定于旧版Tomcat?
  • 此错误还有其他可能的来源吗?

2 个答案:

答案 0 :(得分:0)

我们使用旧版本的shindig,它本身使用JUEL 2.1.x,因此不支持EL 2.2;更新到新的shindig版本应解决该问题,因为它支持JSP 2.2规范。

答案 1 :(得分:0)

根据错误中列出的类,Web应用程序依赖于JUEL

您正在使用的表达式包括方法调用。在EL 2.2(JavaEE 6)中添加了方法调用。 JUEL声称支持EL 2.2,因此看起来您的Web应用程序捆绑了旧版本的JUEL。

一种解决方案是更新该依赖关系。

第二种解决方案是完全放弃JUEL。 Tomcat 7包含一个EL 2.2实现,EL发现机制意味着无论使用哪个EL都应该找到Tomcat的实现,如果它找不到JUEL。

最后,我注意到EL已经在EL 3.0(JavaEE 7)中发挥了重要作用,并且没有明显的JUEL实现EL 3.0的迹象,而在Tomcat 8和其他容器中可以使用EL 3.0实现一段时间我建议向JUEL开发人员询问有关EL 3.0的计划,并根据他们的回应仔细考虑继续使用JUEL。