SpringBoot整合SpringMVC之Servlet,Filter,Listener

這篇文章將實現通過bean和註解的方式添加Servlet三大組件


前言

應用場景: 在使用第三方類庫時,更多的提供的是java.servlet中的組件,不用與SpringMVC耦合

eg:shiro權限認證:需要配置shiro提供的ShiroFilterFactoryBean

總的實現過程:

bean的方式: 在mvc的配置類中,添加三大組件的配置,

  • ServletRegistrationBean --> Servlet
  • FilterRegistrationBean --> Filter
  • ServletListenerRegistrationBean -->Listener

註解的方式:在啓動類中開啓掃描註解@ServletComponentScan,然後分別創建三個組件類,繼承接口,並用註解表明

  • Servlet -->extend HttpServlet  @WebServlet(urlPatterns = "/test/02")
  • Filter  -->implements Filter  @WebFilter("/test/*")
  • Listener  --> implements ServletContextListener  @WenListener

實現

Bean

 @Bean
    public ServletRegistrationBean testServlet01() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean<>(new HttpServlet() {
            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                logger.info("[doGet][uri: {}]",req.getRequestURI());
            }
        });
        servletRegistrationBean.setUrlMappings(Collections.singleton("/test/01"));
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean testFilter01() {
        FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>(new Filter() {
            @Override
            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                logger.info("[doFilter]");
                filterChain.doFilter(servletRequest,servletResponse);
            }
        });
        filterFilterRegistrationBean.setUrlPatterns(Collections.singleton("/test/*"));
        return filterFilterRegistrationBean;
    }

    @Bean
    public ServletListenerRegistrationBean testListener01() {
        return new ServletListenerRegistrationBean<>(new ServletContextListener() {
            @Override
            public void contextInitialized(ServletContextEvent sce) {
                logger.info("[contextInitialized]");
            }

            @Override
            public void contextDestroyed(ServletContextEvent sce) {

            }
        });
    }

 

註解

@WebServlet(urlPatterns = "/test/02")
public class TestServlet02 extends HttpServlet {
    private Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        logger.info("[doGet][uri: {}]", req.getRequestURI());
    }
}
// TestFilter02.java
@WebFilter("/test/*")
public class TestFilter02 implements Filter {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        logger.info("[doFilter]");
        filterChain.doFilter(servletRequest, servletResponse);
    }

}
@WebListener
public class TestServletContextListener02 implements ServletContextListener {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        logger.info("[contextInitialized]");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }

}
@SpringBootApplication
@ServletComponentScan
public class SpringbootSpringmvcCommonresultApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootSpringmvcCommonresultApplication.class, args);
    }

}

謝謝觀看

原文參考:傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章