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精确。

  • 相关阅读:
    【引用】将WINNT.XPE安装到移动硬盘的方法
    手把手教你把Vim改装成一个IDE编程环境(图文)(转)
    [转载]经验丰富的程序员和代码行数
    pkgconfig的使用(转)
    焦点新闻总结
    仿百度弹出框在框架页面中的应用
    发现不明确的匹配的原因和解决办法
    总结一个DAL中写IList返回实体的方法
    后台管理系统界面和样式,点击左边新建标签效果
    在用户控件中用户登录后台脚本判断
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14643899.html
Copyright © 2011-2022 走看看