在之前典型的Java Web程序中,部署描述符web.xml
是必不可少的,在这里我们需要配置各种组件,包括Servlet
、Filter
和Listener
等,如果使用过SpringMVC的话,应该会对在web.xml
中配置org.springframework.web.servlet.DispatcherServlet
十分熟悉。但是对于所有的配置文件都有的一个通病就是只有在程序部署的时候,一些配置项问题才能被发现,而不能在程序编译开发阶段就发现。所以如果通过编程的方法来设置配置项则是一个最好的选择,我们完全可以抛弃web.xml
这个部署描述符,而是换用从Servlet 3.0中提出的一个接口javax.servlet.ServletContainerInitializer
来完成Servlet容器的初始化,该接口的作用是当Web应用启动时,通知一些实现类来执行一些要求的Servlet
、Filter
和Listener
等的编程注册。
一、接口说明
ServletContainerInitializer
接口细节:
其中只有一个方法
onStartup(...)
,在执行任何ServletContext
监听器之前,由Servlet容器调用这个方法,该方法的主要作用是注册Web对象;实现
ServletContainerInitializer
的类必须使用@HandleTypes
注解进行标注,以便声明onStartup(...)
可以处理这个类的实例,所有该类、包括它的子类都会被传递给其中的Set<Class<?>> c
字段,如果没有这个注解,或者在该注解中使用的类不存在或没有相应的子类,则会传递给该参数一个null
值;这个接口被设计在
jar
文件中使用,而无法直接在war
包中直接使用,而是通过在jar
中完成定义,然后将jar
包作为Java Web的依赖包,该接口的实现类会通过Java的SPI
的注册查询机制被发现;如果要使用这个类,需要一个元数据文件来说明如何定位该接口的实现类,该文本文