作用:使用编码方式在项目启动时给ServletContext里面添加组件
1)ServletContainerInitializer实现
2)ServletContextListener实现
例:ServletContainerInitializer
@HandlesTypes(value = {HelloService.class})
public class MyServletContainerInitializer implements ServletContainerInitializer{
@Override
public void onStartup(Set<Class<?>> set, ServletContext ctx)
throws ServletException {
System.out.println("感兴趣的类型:");
for(Class<?> clazz: set) {
System.out.println(clazz);
}
ctx.addListener(HelloListener.class);
ServletRegistration.Dynamic servlet = ctx.addServlet("helloServlet", HelloServlet.class);
servlet.addMapping("/hello");
FilterRegistration.Dynamic filter = ctx.addFilter("helloFilter", HelloFilter.class);
filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
}
}
public class HelloFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("HelloFilter...."); chain.doFilter(request, response); } @Override public void destroy() { } }
public class HelloListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("contextInitialized....."); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("contextDestroyed......"); } }