Servlet3.0--ServletContainerInitializer---servletContext 与SpringMVC的整合 定制SpringMVC 异步

Servlet3.0

ServletContainerInitializer

shared libraies (共享库) /runtimes pluggability(运行时插件能力)

  1. servlet 容器启动会扫描 当前应用里面的没一个jar 包、

​ servletContainerInitializer的实现

  1. 提供ServletContainerInitializer的实现类

    ​ 绑定在META-inf/services/javax.servlet.ServletContainerInitializer

    ​ 内容就是ServletContainerInitializer实现类的全类名

总结:容器在启动的时候 会扫描当前的每一个jar 里面

​ META-INF/services/javax.servlet.ServletContainerInitializer

​ 指定实现类 ,并且启动运行这个类的实现方法

在这里插入图片描述

META-INF/services/javax.servlet.ServletContainerInitializer里面内容 自定义myServletContainerInitializer的全类名

com.huliyong.servlet.myServletContainerInitializer
/**
 *    容器启动的时候会把@HandlesTypes指定的类型下面的子类(实现类,接口)传送过来
 */
@HandlesTypes(value = {HelloService.class})
public class myServletContainerInitializer  implements ServletContainerInitializer   {
    /**
     *
     * 应用启动的时候运行
     * @param set  感兴趣的所有类型的后代类型
     * @param servletContext 当前web应用的servletContext
     * @throws ServletException
     */
    @Override
    public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
        System.out.println("感兴趣的类型");
        System.out.println("-----------------------------------");
        set.forEach(System.out::println);

    }
}

servletContext 注册三大组件(servlet,Filter,Listener)

*使用servletContext 注册web组件(servlet Filter listener )
   使用编码的格式,在项目启动的时候给servletContext 里面添加组件
*   必须在项目启动的时候添加
*      1。 servletContainerInitializer得到的servletContext 对象
*      2.  Listener 中 ServletContextEvent 得到组件     ServletContext servletContext = sce.getServletContext();
*/
/**
 *    容器启动的时候会把@HandlesTypes指定的类型下面的子类(实现类,接口)传送过来
 */
@HandlesTypes(value = {
   HelloService.class})
public class myServletContainerInitializer  implements ServletContainerInitializer   {
   
    /**
     *
     * 应用启动的时候运行
     * @param set  感兴趣的所有类型的后代类型
     * @param  sc 当前web应用的servletContext
     * @throws ServletException
     *
     *使用servletContext 注册web组件(servlet Filter listener )
        使用编码的格式,在项目启动的时候给servletContext 里面添加组件
     *   必须在项目启动的时候添加
     *      1。 servletContainerInitializer得到的servletContext 对象
     *      2.  Listener 中 ServletContextEvent 得到组件     ServletContext servletContext = sce.getServletContext();
     */
    @Override
    public void onStartup(Set<Class<?>> set, ServletContext sc) throws ServletException {
   
        System.out.println("感兴趣的类型");
        System.out.println("-----------------------------------");
        set.forEach(System.out::println);
        //注册组件

        ServletRegistration.Dynamic userServlet = sc.addServlet("UserServlet", UserServlet.class);
        //配置映射信息
        userServlet.addMapping("/user");
        //注册组件Listener
        sc.addListener(UserListener.class);

        //注册组件Filter
        FilterRegistration.Dynamic userFilter = sc.addFilter("userFilter", new UserFilter());
        userFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*");


    }
}

Servlet3.0与SpringMVC 进行整合

容器在启动的时候 会扫描当前的每一个jar 里面

​ META-INF/services/javax.servlet.ServletContainerInitializer

​ 加载这个文件的指定类XXXServletContainerInitializer

Spring的应用在启动的时候会加载(感兴趣)WebApplicationInitializer接口下的组件

并且为WebApplicationInitializer组件创建对象(组件不是接口,不是抽象类 )

  1. AbstractContextLoaderInitializer: createRootApplicationContext()

    1. AbstractDispatcherServletInitializer:

      1.      创建一个web 容器  servletAppContext        createServletApplicationContext()、
      2.      创建一个 dispatcherServlet        createDispatcherServlet()
      3.       创建的dispatcherServlet         添加到servletAppContext   里面
      

      3.AbstractAnnotationConfigDispatcherServletInitializer

      ​ 注解方式进行配置dispatcherServlet 初始器

      ​ 1. 创建根容器createRootApplicationContext()

      ​ 2 创建web的ioc 容器:createServletApplicationContext()

总结:以注解方法来启动SpringMVC 继承AbstractAnnotationConfigDispatcherServletInitializer

​ 实现里面的抽象方法指定DispatcherServlet的配置信息

[

如图 希望我们 RootWeb。。。 对业务逻辑等组件进行扫描

					servletWeb ...   对页面的组件进行扫描
    <build>
        <plugins>
            <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                     <version>3.2.2</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
            </plugin>
        </plugins>
    </build>
    无xml 下要加上这个
    
    必须导入servlet-api  并且<scope>provided</scope> 
     <dependency>
        <groupId>javax.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值