SpringBoot - 整合SerSpringBoot - 整合Servlet、Filter和Listener(@WebServlet等注解的使用)

作者: hangge 发布时间: 2019-12-27 浏览: 1866 次 编辑

使用 Spring Boot 开发项目之后,就基本上告别 ServletFilter Listener 了。但是有时在整合一些第三方框架时,可能还是不得不使用 ServletSpring Boot 中对于整合这些基本的 Web 组件也提供了很好的支持,下面通过样例进行演示。

1,定义组件

(1)下面代码代码定义一个基本的 Servlet 组件,并使用 @WebServlet 注解进行标注。

@WebServlet("/my")
public class MyServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("name>>>" + req.getParameter("name"));
    }
}

(2)下面代码代码定义一个基本的 Filter 组件,并使用 @WebFilter 注解进行标注。

@WebFilter("/*")
public class MyFilter implements Filter {
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("MyFilter>>>init");
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter>>>doFilter");
        filterChain.doFilter(servletRequest, servletResponse);
    }
 
    @Override
    public void destroy() {
        System.out.println("MyFilter>>>destroy");
    }
}


(3)下面代码代码定义一个基本的 Listener 组件,并使用 @WebListener 注解进行标注。这里以 ServletRequestListener 为例,对于其它的 Listener,例如 HttpSessionListenerServletContextListener 等也是支持的。

@WebListener
public class MyListener implements ServletRequestListener {
 
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("MyListener>>>requestInitialized");
    }
 
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("MyListener>>>requestDestroyed");
    }
}

2,项目配置

我们需要在项目入口类上添加 @ServletComponentScan 注解,实现对 ServletFilter Listener 的扫描。这样我们定义的 ServletFilterListener 就可以直接通过 @WebServlet@WebFilter@WebListener 注解自动注册。

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

3,测试运行

(1)我们通过浏览器访问如下地址:
  • http://localhost:8080/my?name=hangge

(2)可看到控制台输出的日志如下:

原文:SpringBoot - 整合Servlet、Filter和Listener(@WebServlet等注解的使用)


原文出自:www.hangge.com 转载请保留原文链接:https://www.hangge.com/blog/cache/detail_2524.html