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 {
@Override
public void onStartup(Set<Class<?>> clzes, ServletContext ctx) throws ServletException {
System.out.println("感兴趣的类型:");
for (Class<?> clz : clzes) {
System.out.println(clz);
}
//注册组件
//注册Filter
FilterRegistration userFilter = ctx.addFilter("userFilter", UserFilter.class);
userFilter.addMappingForUrlPatterns(EnumSet.
of(DispatcherType.REQUEST), true, "/*");
//配置filter的映射信息
ServletRegistration.Dynamic userServlet = ctx.addServlet("userServlet", new UserServlet());
//注册servlet
userServlet.addMapping("/user");
//注册Listener
ctx.addListener(UserListener.class);
}
}
小结:
1、使用ServletContext可以注册web三大组件(Servlet、Filter、Listener)
2、使用编码的方式,在项目启动的时候给ServletContext里面添加组件:
必须在项目启动的时候来添加:
1)、ServletContainerInitializer得到ServletContext,
2) 、ServletContextListener得到ServletContext。