目录
流程
- Servlet容器启动会扫描。当前应用里面每一个jar报的ServletContainerInitializer的实现
- ServletContainerInitializer的实现类必须绑定在 MATEINT/services/javax.servlet.ServletContainerInitializer下 。文件的内容就是ServletContainerInitializer实现的全类名
总结:容器在启动应用的时候,会扫描当前应用每一个jar包里面
MATE-INF/services/javax.servlet.ServletContainerInitializer中指定的实现类,启动并执行这个方法
ServletContainerInitializer的实现类
//容器启动的时候会将HandlesTypes指定的类型下面的子类(子类子接口等)传递过来
//传入感兴趣的类型
@HandlesTypes(value = {HellowService。class})
public class MyServletContainerInitializer implements ServletContainerInitializer {
//在容器启动的时候 会自动运行这个方法
/**
*
* @param c 感兴趣类型的所有子类型
* @param ctx 代表当前web应用的 ServletContext 一个应用一个ctx
* @throws servletexception
*/
//1.使用ServletContext注册web组件(servlet filter listener)
@Override
public void onStartup(Set<Class<?>> c, ServletContext ctx) throws servletexception {
System.out.println("感兴趣的类型");
for (Class<?> type:c){
System.out.println(type);
}
//注册组件
ServletRegistration.Dynamic servlet = ctx.addServlet("servlet", new UserServlet());
servlet.addMapping("/u1","u2");
//注册Filter
FilterRegistration.Dynamic filter = ctx.addFilter("filter", new UserFilter());
filter.addMappingForUrlPatterns(EnumSet.of(dispatcherType.REQUEST),true,"/*");
//注册listener
ctx.addListener(UserListener.class);
}
}
- @HandlesTypes(value = {HellowService.class}) 容器启动的时候会将HandlesTypes指定的类型下面的子类(子类子接口等)传递过来
- 通过 ServletContext 为容器中注册web组件(Servlet,Filter,Listener),必须在项目启动的时候添加
- ServletContainerInitializer得到的ServletContext
- SerletContextListener得到的ServletContext
springMVC
- spring的应用一启动会加载感兴趣的WebApplicationInitializer接口下的所有组件(
- 并且为WebApplicationInitializer组件创建对象(组件不是接口,不是抽象类)
1. AbstractContextLoaderInitializer:创建根容器 createRootApplicationContext();
2. AbstractdispatcherServletinitializer
创建了一个web的ioc容器;createServletApplicationContext();
创建了dispatcherServlet;createdispatcherServlet()
将创建的dispatcherServlet添加到ServletContext中 getServletMappering()
3. AbstractAnnotationConfigdispatcherServletinitializer
总结:
以注解方式启动SpringMVC;继承AbstractAnnotationConfigdispatherServletinitializer
抽象方法指定dispaterServlet的配信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。