web.xml中与Servlet 3.0兼容的web-app声明有什么作用?

Jen*_* S. 11 java web-applications jetty servlet-3.0

我正在部署一个在web.xml中声明并部署为.war文件的Web应用程序.

我正在Jetty 9.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">
Run Code Online (Sandbox Code Playgroud)

我的配置实际上声明了一些仅Servlet 3.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">
Run Code Online (Sandbox Code Playgroud)

但我害怕这样做,因为我不明白Jetty的区别.

更改声明是否会影响Jetty的运行时行为?Jetty对待2.4应用程序的方式与3.0应用程序不同吗?

dig*_*ise 2

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

科学的方法

最初,我开始通过在2.42.5diff之间进行实验以及比较2.53.0来证明这一点。

我确信2.42.5之间的差异只是相加的,并且名称空间已从 转变j2eejavaee

然而3.0的 xsd 架构比其他两个版本的 1/3 小。不确定在这种情况下如何进行(欢迎任何想法!)


您可以从这里下载所有模式并自己进行比较:


方法不太科学

以下是描述该标准每个新版本的新增文章:

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

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

希望这可以帮助!