【springboot】17、使用/注入Servlet、Filter、Listener

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 【springboot】17、使用/注入Servlet、Filter、Listener,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

基本介绍

考虑到实际开发业务非常复杂和需要兼容各种组件,SpringBoot 支持将 Servlet、Filter、Listener 注入
Spring 容器, 成为 Spring bean。

注解方式注入

我们要想使用Servlet、Filter、Listener,只需要要javaWeb那样使用对应的注解即可,也就是@WebServlet,@WebListener,@WebFilter。示例代码如下

@WebServlet(urlPatterns = "/myServlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet--被访问");
    }
}
@WebListener
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听器--contextInitialized");
    }
}
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤器--doFilter");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

如果使用这种方式,那么我们还需要在配置类上添加一个@ServletComponentScan注解,这个注解用于指定扫描原生Servlet组件的路径
在这里插入图片描述

我在启动类上指定了扫描路径
在这里插入图片描述

启动项目,监听器生效了

在这里插入图片描述

下面访问一下我们自己定义的servlet

在这里插入图片描述

在这里插入图片描述

可以发现Servlet和Filter都生效了,这个就是第一种方式,这种方式注入的组件并不是由springboot来进行管理的,二是由tomcat进行管理,下面介绍第二种方式,这种方式会将原生Web组件注册成为一个bean,并交由springboot进行管理。

使用RegistrationBean 方式注入

我们先将@ServletComponentScan这个注解注释掉,然后使用RegistrationBean 方式注入。
在这里插入图片描述
我们顺便也把@WebServlet,@WebListener,@WebFilter这些注解给注释掉
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们使用RegistrationBean的方式如下

@Configuration
public class OriginalWebConfig {
    @Bean
    public ServletRegistrationBean<MyServlet> myServletServletRegistrationBean() {
        MyServlet myServlet = new MyServlet();
        return new ServletRegistrationBean<>(myServlet, "/myServlet");
    }

    @Bean
    public FilterRegistrationBean<MyFilter> myFilterFilterRegistrationBean() {
        MyFilter myFilter = new MyFilter();
        return new FilterRegistrationBean<>(myFilter);
    }

    @Bean
    public ServletListenerRegistrationBean<MyListener> myListenerServletListenerRegistrationBean() {
        MyListener myListener = new MyListener();
        return new ServletListenerRegistrationBean<>(myListener);
    }
}

我们只需要在配置类中返回对于的RegistrationBean即可,其中ServletRegistrationBean可以在构造函数中指定路径。下面来启动项目
在这里插入图片描述
监听器没有问题,下面来访问下/myServlet
在这里插入图片描述
在这里插入图片描述

可以发现也没有问题,下面我们就来看一下在spring容器中是否有上面的几个组件,debug一下
在这里插入图片描述
在singletonObjects中,我们发现了我们自己写的Listener,有这个,其他的肯定也有,就不在找了,我们通过RegistrationBean就可以注入原生的Web组件,并且交由springboot进行管理

总结

没啥好说的,对于上面的两种注入原生Web组件的方式,建议使用RegistrationBean的方式进行注入

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140220.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!