这个问题是由于Servlet3.0之后的web.xml的文件头配置已经和之前的版本不一样了,以下为Eclipse创建的Dynamic Web Project的web.xml文件,Servlet为2.5:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
...
</web-app>
Servlet版本为3.0的时候:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
...
</web-app>
使用Maven构建的Web项目的web.xml文件(使用的archetype为maven-archetype-webapp,版本为1.0)如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
...
</web-app>
从以上的比较可以看出,是因为文件头不同才会导致这个问题,只需要修改文件头与Servlet3.0的一致即可解决这个问题。
使用Jetty时要注意使用的Jetty版本是否支持Servlet3.0,建议使用Jetty8.X或以上的版本。