当前位置: 代码迷 >> 综合 >> Servlet3.0之ServletContext
  详细解决方案

Servlet3.0之ServletContext

热度:93   发布时间:2024-03-10 01:11:41.0

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。

  相关解决方案