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

时间:2014-01-27 14:42:57

标签: 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">

我的配置实际上声明了一些仅限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">

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

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

1 个答案:

答案 0 :(得分:1)

您应该可以简单地将架构声明从 2.4 交换为 3.0

科学方法

最初,我开始通过 2.4 2.5 之间的diff进行证明,另一个比较 2.5 3.0

我确信自己 2.4 2.5 之间的差异只是加法,名称空间已从j2ee转移到javaee

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


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


不那么科学的方法

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

如果你读完了,文章中提到的web.xml描述符的更改是分钟的。

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

希望这有帮助!