Web描述符中web-app中的version属性是否会影响使用的实际Servlet API版本?

时间:2016-06-09 10:03:43

标签: tomcat servlets web.xml opencms

网上有很多提示建议web.xml<web-app version="xxx">中的版本必须与相应应用程序使用(和预期)的当前API相匹配。 E.g:

但我未能证明这一点。在编译JSP时,这个version是否有效?

背景

我一直在调试Tomcat 6.0.45中的[...] JasperException: somewhere.jsp(69,10) The function concat must be used with a prefix when a default namespace is not specified

经过一些研究,我发现somewhere.jsp使用参数调用bean方法,只支持EL 2.2+(参见例如Differences between EL 2.1 and 2.2)。到目前为止一切顺利:Tomcat 6.0.45是一个仅支持EL 2.1的servlet 2.5容器。

但是我在Tomcat 8.0.32(Servlet 3.1,EL 3.0)上安装了相同的应用程序,并且使用相同的web.xml,但是没有显示失败,这让我感到惊讶,因为在{ {1}},我有web.xml

我也失败了进一步尝试通过仅更改此version="2.4"属性来调整用于编译和运行JSP的Servlet API版本,所以我很困惑。

1 个答案:

答案 0 :(得分:1)

web.xml中指定的版本仅确定用于解析web.xml文件的规则。容器的行为总是由它实现的规范版本决定。

例如,您无法通过在web.xml中指定version="2.5"来禁用注释扫描(在Servlet 3.0 / Tomcat 7中引入)。有关此要求的示例,请参见Servlet 3.0 servlet规范的1.6.2节。