zoukankan      html  css  js  c++  java
  • SpringBoot:Web原生组件注入

    注入方式

    Web原生组件指的是:Servlet、Filter、Listener

    注解注入

    @WebServlet(urlPatterns = "/myServlet")
    public class MyServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.getWriter().write("servlet");
        }
    }
    

    main方法加上@ServletComponentScan

    @ServletComponentScan
    @SpringBootApplication
    public class Boot2MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(Boot2MyApplication.class, args);
        }
    }
    

    image-20210411141340382

    官方文档也是这样说明的:

    image-20210411141522245

    测试filter:

    @Slf4j
    @WebFilter(urlPatterns = "/myServlet")
    public class MyFilter implements Filter {
    
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            log.info("init");
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            log.info("MyFilter doFilter");
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
            log.info("destroy");
        }
    }
    

    image-20210411141820799

    RegistrationBean方式

    官方文档上上面还写了一个方式:

    image-20210411142216464

    测试:先注释掉filter和servlet上面的注解

    编写配置类:

    @Configuration
    public class MyRegistryConfig {
    
        @Bean
        public ServletRegistrationBean<MyServlet> myServlet(){
            MyServlet myServlet = new MyServlet();
            return new ServletRegistrationBean<>(myServlet, "/myServlet");
        }
    
        @Bean
        public FilterRegistrationBean<MyFilter> myFilterFilterRegistrationBean(){
            MyFilter myFilter = new MyFilter();
            return new FilterRegistrationBean<>(myFilter,myServlet());
        }
    }
    

    测试,仍然成功。Listener与其类似,使用的是ServletListenerRegistrationBean注册,这里不再演示。

    DispatcherServlet注册原理

    进入DispatcherServletAutoConfiguration自动配置类:有一个内部类DispatcherServletConfiguration

    这里向容器中注入了一个DispatcherServlet,DispatcherServlet默认处理的请求路径是“/”

    image-20210411145835419

    后面又有一个DispatcherServletRegistrationConfiguration,向容器中注册了DispatcherServletRegistrationBean,并设置了DispatcherServlet

    image-20210411145944294

    DispatcherServletRegistrationBean是继承于ServletRegistrationBean

    image-20210411150057038

    在tomcat中,Servlet处理请求为精确优先处理原则。

    如果有两个servlet,AServlet可以处理"/",BServlet可以处理“/hello”,那么如果发送“/hello”请求,则为BServlet处理,因为BServlet比AServlet精确。

  • 相关阅读:
    [转]ExtJS3.0与KindEditor4.1.2整合
    [转]Ext.grid常用属性和方法
    Extjs gridpanel 合并单元格
    [转]Httrack工具与使用指南
    [转]Teleport Ultra/Teleport Pro的冗余代码批量清理方法
    [转]最全的用正则批量去除Teleport Pro整站下载文件冗余代码
    Teleport Pro使用教程
    如何通过Dreamweaver批量对整个站点或目录进行代码搜索或部分全部替换
    [转]使用DW正则表达式批量替换实例介绍
    [转]tppabs是什么?如何去除tppabs?
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14643899.html
Copyright © 2011-2022 走看看