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

妖狐艹你老母 2022-09-10 02:19 257阅读 0赞

叙述

使用 Spring Boot 开发项目之后,就基本上告别 Servlet、Filter 和 Listener 了。但是有时在整合一些第三方框架时,可能还是不得不使用 Servlet。Spring Boot 中对于整合这些基本的 Web 组件也提供了很好的支持。

解决方案

定义组件

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

  1. @WebServlet("/my")
  2. public class MyServlet extends HttpServlet {
  3. @Override
  4. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  5. throws ServletException, IOException {
  6. doPost(req, resp);
  7. }
  8. @Override
  9. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
  10. throws ServletException, IOException {
  11. System.out.println("name>>>" + req.getParameter("name"));
  12. }
  13. }

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

  1. @WebFilter("/*")
  2. public class MyFilter implements Filter {
  3. @Override
  4. public void init(FilterConfig filterConfig) throws ServletException {
  5. System.out.println("MyFilter>>>init");
  6. }
  7. @Override
  8. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
  9. FilterChain filterChain) throws IOException, ServletException {
  10. System.out.println("MyFilter>>>doFilter");
  11. filterChain.doFilter(servletRequest, servletResponse);
  12. }
  13. @Override
  14. public void destroy() {
  15. System.out.println("MyFilter>>>destroy");
  16. }
  17. }

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

  1. @WebListener
  2. public class MyListener implements ServletRequestListener {
  3. @Override
  4. public void requestInitialized(ServletRequestEvent sre) {
  5. System.out.println("MyListener>>>requestInitialized");
  6. }
  7. @Override
  8. public void requestDestroyed(ServletRequestEvent sre) {
  9. System.out.println("MyListener>>>requestDestroyed");
  10. }
  11. }

项目配置

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

  1. @SpringBootApplication
  2. @ServletComponentScan
  3. public class DemoApplication {
  4. public static void main(String[] args) {
  5. ConfigurableApplicationContext context
  6. = SpringApplication.run(DemoApplication.class, args);
  7. }
  8. }

测试运行

(1)我们通过浏览器访问如下地址:

  • http://localhost:8080/my?name=hangge

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

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

发表评论

表情:
评论列表 (有 0 条评论,257人围观)

还没有评论,来说两句吧...

相关阅读