一、新特性
1、增加新注解 @WebServlet、@WebFilter、@WebListener
2、异步支持: 在注解中或web.xml部署描述符声明的Servlet、Filer中声明async-supported为true即可,默认async-supported为false
3、可支持性插件:不修改已有Web,只需按一定格式(即:jar包的META-INFO目录下有web-fragment.xml文件)打成jar包,放到WAR包WEB-INFO\lib目录下,即可实现新功能的扩充。
注:1、可插拔jar包中的 @WebServlet、@WebFilter、@WebListener不起作用,Servlet、Filter、Listener必须显示声明到web-fragment.xml中,或者在ServletContainerInitializer子类动态注册,或者在ServletContextListener的contexInitialized方法中动态注册
2、web-fragment.xml中可用name和order标签指定加载顺序
3、WAR包中web.xml必须设置metadata-complete为true才支持可插拔特性,默认为false
4、ServletContext增强动态注册功能:不在部署描述符或web-fragment.xml中声明Servlet、Filter、Listener,动态注入三者
注:1、 动态注册只能在ServletContainerInitializer的onStarup方法或ServletContextListener的contexInitialized中使用
2、不可在ServletContextListener中再次注入ServletContextListener的实现类
5、HttpServletRequest对文件上传的支持:
1、@MultipartConfig支持MIME类型是multipart/form-data
2、HttpServletRequest新增 Part getPart(String name)、Collection<Part> getParts()两个方法对文件处理
6、ServletContainerInitializer
1、子类可以用@HandlesTypes标注,也可以不用
2、可以一个应用有多个子类实现
3、用户代替web.xml,可以完成容器初试化时的一些操作,如:注册Servlet、Filter、Listener
4、实现子类必须在WAR包的META-INF\services下的 javax.servlet.ServletContainerInitializer文件中写入全子类名
5、子类可以在web-fragment模块中
7、使用@HandlesTypes机制,可使servlet与自定义程序解耦