zoukankan      html  css  js  c++  java
  • ServletContainerInitializer

    在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能。
    每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer实现类。

    一般伴随着ServletContainerInitializer一起使用的还有HandlesTypes注解,通过HandlesTypes可以将感兴趣的一些类注入到ServletContainerInitializerde的onStartup方法作为参数传入。

    @HandlesTypes(value = {TestService.class})  //容器启动的时候会将@HandlesTypes指定的这个类型下面的子类(实现类,子接口等)传递过来
    public class TestServletContainerInitializer implements ServletContainerInitializer {
        //set 父类感兴趣的子类类
        @Override
        public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
            System.out.println("感兴趣的类型");
            for(Class<?> classs:set){
                System.out.println(classs);
            }
        }
    }

    tomcat容器启动时会扫描 service下的 ServletContainerInitializer 

    手动注册三大组件

      public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
            System.out.println("感兴趣的类型");
            for(Class<?> classs:set){
                System.out.println(classs);
            }
    
            //注册三大组件
            //servlet
            ServletRegistration.Dynamic testServlet = servletContext.addServlet("testServlet", new TestServlet());
            testServlet.addMapping("/testServlet");
            //listener
            servletContext.addListener(TestListener.class);
            //filter
            FilterRegistration.Dynamic testFilter = servletContext.addFilter("testFilter", TestFilter.class);
            //注册filter的映射信息,可以指定专门来拦截哪个servlet
            testFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*");
    
    
        }

    spring mvc 在容器启动时也是这样  

      

  • 相关阅读:
    WinDbg调试C#技巧,解决CPU过高、死锁、内存爆满
    Window环境下搭建Git服务器
    Virtual Box虚拟机Ubuntu系统安装及基本配置
    修改VS2017新建类模板文件添加注释
    .net core 使用IIS作为宿主Web服务器,部署常见问题
    Asp.Net进程外Session(状态服务器Session、数据库Session)
    百度地图DEMO-路线导航,测距,标点
    c#文件图片操作
    C#代码安装Windows服务(控制台应用集成Windows服务)
    通过经纬度获取地址信息
  • 原文地址:https://www.cnblogs.com/qin1993/p/11927919.html
Copyright © 2011-2022 走看看