• 4.10 SpringBoot整合Servlet、Filter过滤器和Listener


    一般情况下,使用Spring、Spring MVC这些框架之后,基本上就告别Servlet、Filter以及Listener 了,但是有时在整合一些第三方框架时,可能还是不得不使用Servlet,比如在整合某报表插件时就需要使用Servlet。Spring Boot中对于整合这些基本的Web组件也提供了很好的支持。

    1. 启动类

    启动类上添加@ServletComponentScan描述

    @ServletComponentScan
    public class RuoYiApplication {
        public static void main(String[] args) {
        ...
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1. 整合Servlet

    import org.springframework.stereotype.Component;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * 整合Servlet测试
     * 接口url:/my
     */
    //@Component
    @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 {
            //打印name参数
            System.out.println("MyServlet>>" + req.getParameter("name"));
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    在这里插入图片描述
    在这里插入图片描述

    2. Filter过滤器

    package com.ruoyi.web.servlet.config;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    /**
     * 过滤器
     * WebFilter指定过滤请求
     */
    @WebFilter("/*")
    public class MyFilter implements Filter {
        @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 init(FilterConfig filterConfig) throws ServletException {
        	//项目启动时执行
            System.out.println("MyFilter>>init");
        }
    
        @Override
        public void destroy() {
            System.out.println("MyFilter>>destroy");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述

    3. Listener监听器

    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.annotation.WebListener;
    
    /**
     * 自定义监听器
     */
    @WebListener
    public class MyListener implements ServletRequestListener {
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("监听器: MyListener >> requestDestroyed");
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            System.out.println("监听器: MyListener >> requestInitialized");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    4. 总结

    • 这里定义了三个基本的组件,分别使用@WebServlet、@WebFilter和@WebListener三个注解
      进行标记。
    • 这里以ServletRequestListener为例,但是对于其他的Listener,例如HttpSessionListener、
      ServletContextListener等也是支持的。

    5. JavaWeb三大组件

    JavaWeb三大组件

    ****************************************************

  • 相关阅读:
    MySQL 是怎么加行级锁的?为什么一会是 next-key 锁,一会是间隙锁,一会又是记录锁?
    C++&QT day11
    [LeetCode周赛复盘] 第 306 场周赛20220814
    用vscode修改代码后运行程序不更新
    解决charles只能使用30分钟
    Window安装Go语言最新版
    默默无闻之随机练习题
    [UE][C++]Assimp库安装编译,UE_Assimp插件安装使用,各种三维格式转换
    springboot高校教室排课系统的设计与实现毕业设计-附源码221556
    redis学习六redis的集群:主从复制、CAP、PAXOS、Cluster分片集群(一)
  • 原文地址:https://blog.csdn.net/qq_44289784/article/details/138079925