ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Servlet 3.0之ServletContainerInitializer与SpringMVC

2021-04-14 17:59:36  阅读:168  来源: 互联网

标签:容器 web SpringMVC servlet ctx ServletContainerInitializer ServletContext Servlet


目录

流程

  1. Servlet容器启动会扫描。当前应用里面每一个jar报的ServletContainerInitializer的实现
  2. 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);

    }
}
  1. @HandlesTypes(value = {HellowService.class}) 容器启动的时候会将HandlesTypes指定的类型下面的子类(子类子接口等)传递过来
  2. 通过 ServletContext 为容器中注册web组件(Servlet,Filter,Listener),必须在项目启动的时候添加
    1. ServletContainerInitializer得到的ServletContext
    2. SerletContextListener得到的ServletContext

springMVC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. spring的应用一启动会加载感兴趣的WebApplicationInitializer接口下的所有组件(
  2. 并且为WebApplicationInitializer组件创建对象(组件不是接口,不是抽象类)
    1. AbstractContextLoaderInitializer:创建根容器 createRootApplicationContext();
    2. AbstractDispatcherServletInitializer

    • 创建了一个web的ioc容器;createServletApplicationContext();
      创建了DispatcherServlet;createDispatcherServlet()
      将创建的DispatcherServlet添加到ServletContext中 getServletMappering()

    3. AbstractAnnotationConfigDispatcherServletInitializer

    • 创建根容器:createRootApplicationContext()
      gootRootConfigClasses();传入一个配置类
      创建web的ioc容器:createServletApplicationContext();
      获取配置类:getServletConfigClassess();

总结:
以注解方式启动SpringMVC;继承AbstractAnnotationConfigDispatherServletInitializer
抽象方法指定DispaterServlet的配信息

标签:容器,web,SpringMVC,servlet,ctx,ServletContainerInitializer,ServletContext,Servlet
来源: https://blog.csdn.net/qq_44620773/article/details/115703177

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有