Java web.xml中与Servlet 3.0兼容的web应用程序声明的作用是什么?
我正在部署一个web应用程序,它以web.xml声明并作为.war文件部署 我正在Jetty9.1.x上部署(但我认为这个问题不是特定于容器的) 我的web.xml文件非常旧,它声明自己是Servlet 2.4应用程序: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-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.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将实现
ServletContextListner
(或任何其他servlet侦听器类型)的@WebListener
注释类添加到类路径中,并查看是否已拾取该类。无论声明如何,都不会拾取My WebListener。在我所有的测试中,我没有发现不同的行为。我还可以测试什么功能?我想我看到了问题:我的应用程序部署了gwt-servlet-2.5.1。。。因此,无论我做什么,我的请求都将通过2.5servlet而不是3.0servlet提供。如果您使用的是与Servlet3.0兼容的容器,我认为声明web应用程序版本会使容器仅支持这些功能。我会尝试用不同的容器来确定。