Java web.xml中与Servlet 3.0兼容的web应用程序声明的作用是什么?

Java web.xml中与Servlet 3.0兼容的web应用程序声明的作用是什么?,java,web-applications,jetty,servlet-3.0,Java,Web Applications,Jetty,Servlet 3.0,我正在部署一个web应用程序,它以web.xml声明并作为.war文件部署 我正在Jetty9.1.x上部署(但我认为这个问题不是特定于容器的) 我的web.xml文件非常旧,它声明自己是Servlet 2.4应用程序: <web-app version="2.4" id="my_app" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

我正在部署一个web应用程序,它以web.xml声明并作为.war文件部署

我正在Jetty9.1.x上部署(但我认为这个问题不是特定于容器的)

我的web.xml文件非常旧,它声明自己是Servlet 2.4应用程序:

<web-app version="2.4" id="my_app"
     xmlns="http://java.sun.com/xml/ns/javaee"
     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">

我的配置实际上声明了一些仅适用于Servlet3.0的特性,比如默认错误页面。这些特性不会根据模式进行验证,但这些特性似乎工作正常

由于我使用的是3.0功能,我希望将声明更改为正确:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">

但我害怕这样做,因为我不明白Jetty会有什么不同


更改声明会对Jetty的运行时行为产生任何影响吗?Jetty对待2.4应用程序是否与对待3.0应用程序有所不同

您应该能够简单地将模式声明从2.4交换到3.0

科学方法 最初,我开始通过在2.42.5之间做
diff
来证明这一点,另外一个比较2.53.0

我已经说服自己,2.42.5之间的差异只是加性的,名称空间已经从
j2ee
转移到
javaee

但是3.0的xsd模式小于其他两个版本的1/3。不确定在这种情况下如何进行(欢迎任何想法!)


您可以从此处下载所有模式,并自己进行比较:


不那么科学的方法 以下是描述标准每个新版本的文章:

如果您阅读,文章中提到的对
web.xml
描述符的更改非常微小。

我要做的只是列出原始
web.xml
中的所有元素,并确认它们确实存在于描述


希望这有帮助

我想是的。出于调查目的,使用3.0将实现
ServletContextListner
(或任何其他servlet侦听器类型)的
@WebListener
注释类添加到类路径中,并查看是否已拾取该类。无论声明如何,都不会拾取My WebListener。在我所有的测试中,我没有发现不同的行为。我还可以测试什么功能?我想我看到了问题:我的应用程序部署了gwt-servlet-2.5.1。。。因此,无论我做什么,我的请求都将通过2.5servlet而不是3.0servlet提供。如果您使用的是与Servlet3.0兼容的容器,我认为声明web应用程序版本会使容器仅支持这些功能。我会尝试用不同的容器来确定。