浅谈springMVC与servlet
通过注解的方式快速搭建web应用(不需要web.xml)
ServletContainerInitializer初始化web容器
1.在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filters等,servlet规范(JSR356)中通过ServletContainerInitializer实现此功能。
2. 每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作。
3. 创建javax.servlet.ServletContainerInitializer文件
4.新建实例容器初始化类并实现ServletContainerInitializer接口
5.编辑javax.servlet.ServletContainerInitializer文件
实例容器初始化类的相对路径
com.healer.servlet.HealerServletContainerInitializer
6.与ServletContainerInitializer一起使用的注解@HandlesTypes
@HandlesTypes(value={HealerService.class}):当容器启动时会将HandlesTypes指定类型下面得子类子接口等会以参数的形式传入onStartup()方法,tomcat启动时加载应用的时候,会运行onStartup()方法
package com.healer.servlet;
import com.healer.filter.HealerFilter;
import com.healer.listener.HealerListener;
import com.healer.service.HealerService;
import javax.servlet.;
import javax.servlet.annotation.HandlesTypes;
import java.util.EnumSet;
import java.util.Set;
@HandlesTypes(value ={HealerService.class})
public class HealerServletContainerInitializer implements ServletContainerInitializer {
/**
* @param set HealerService 下的所有子类型
* @param servletContext 用来加入第三方的组件
* @throws ServletException
/
@Override
public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
System.out.println(“HealerService接口下的所有子类型:你想要加入的类型”);
// HealerService接口下的所有子类型:你想要加入的类型
// class com.healer.service.Impl.HealerServiceImpl
// class com.healer.service.Impl.AbstractHealerService
// interface com.healer.service.HealerServiceOther
for (Class<?> clazz :set){
System.out.println(clazz);//当传入是利用Java反射机制来创建对象等操作
}
/*
* 注册组件
/
//注册Servlet组件
ServletRegistration.Dynamic servlet=servletContext.addServlet(“HealerServlet”,new HealerServlet());
//添加映射
servlet.addMapping("/healerMappingTest");
//注册监听器组件
servletContext.addListener(HealerListener.class);
//注册过滤器组件
FilterRegistration.Dynamic filter=servletContext.addFilter(“HealerFilter”,new HealerFilter());
//添加Filter的映射信息,可以来专门拦截那个servlet
// filter.addMappingForUrlPatterns(拦截类型为请求,true,"/")拦截请求路径
filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/");
}
}
7.注册Servlet,Filter,Lisrener组件
花有重开日,人无再少年。