网上有很多提示建议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版本,所以我很困惑。
答案 0 :(得分:1)
web.xml中指定的版本仅确定用于解析web.xml文件的规则。容器的行为总是由它实现的规范版本决定。
例如,您无法通过在web.xml中指定version="2.5"
来禁用注释扫描(在Servlet 3.0 / Tomcat 7中引入)。有关此要求的示例,请参见Servlet 3.0 servlet规范的1.6.2节。