Servlet3.0之ServletContext
1、自定义MyServletContainerInitializer实现ServletContainerInitializer接口,在onStartup方法中传入组件
@HandlesTypes,可以传入你想要的java类的子类的所有类型,以HelloService接口为例子。
package main.com.kerwin.servlet;import main.com.kerwin.service.AbsHelloService;
import main.com.kerwin.service.HelloService;
import main.com.kerwin.service.HelloServiceExt;import javax.servlet.*;
import javax.servlet.annotation.HandlesTypes;
import java.util.EnumSet;
import java.util.Set;
/*** @author Kerwin**/
@HandlesTypes(value={
HelloService.class, AbsHelloService.class, HelloServiceExt.class})
public class MyServletContainerInitialier implements ServletContainerInitializer {
@Overridepublic void onStartup(Set<Class<?>> clzes, ServletContext ctx) throws ServletException {
System.out.println("感兴趣的类型:");for (Class<?> clz : clzes) {
System.out.println(clz);}//注册组件//注册FilterFilterRegistration userFilter = ctx.addFilter("userFilter", UserFilter.class);userFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");//配置filter的映射信息ServletRegistration.Dynamic userServlet = ctx.addServlet("userServlet", new UserServlet());//注册servletuserServlet.addMapping("/user");//注册Listenerctx.addListener(UserListener.class);}
}
小结:
1、使用ServletContext可以注册web三大组件(Servlet、Filter、Listener)
2、使用编码的方式,在项目启动的时候给ServletContext里面添加组件:
必须在项目启动的时候来添加:
1)、ServletContainerInitializer得到ServletContext,
2) 、ServletContextListener得到ServletContext。