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



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

  • Java web应用程序-是什么决定了我的Servlet API版本?它是否在web.xml中指定
  • 网络应用程序的版本究竟是什么?它会影响什么
  • org.apache.jasper.JasperException:如果没有指定默认名称空间,则函数测试必须与前缀一起使用
  • 我如何检查服务器使用的EL版本
  • webapp版本2.4至2.5内存不足

但我没能证明。这个version在编译JSP时有任何作用吗?


背景

我一直在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+中只支持的方法(例如参见EL 2.1和2.2之间的差异)。到目前为止,一切都很好:Tomcat 6.0.45是一个servlet 2.5容器,只支持EL 2.1。

但我随后在Tomcat 8.0.32(Servlet 3.1,EL 3.0)上安装了相同的应用程序,使用相同的web.xml,故障不会显示,这让我很惊讶,因为在web.xml中,我有version="2.4"

我还尝试通过只更改这个version属性来调整用于编译和运行JSP的Servletneneneba API版本,但没有成功,所以我很困惑。

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

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

最新更新