Spring Boot整合Servlet、Filter和Listener

前期回顾:
创建Spring Boot项目
Spring Boot项目基础配置
Spring Boot上传文件
Spring Boot全局异常处理、全局数据、参数预处理
Spring Boot自定义拦截器

  • 整合Servlet
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;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@WebServlet("/servlet")
public class CustomServlet 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 {
        super.doPost(req, resp);
        log.info("in CustomServlet");
    }
}

Servlet是运行在服务器上的一个小程序。Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:客户端发送请求到服务器,服务器启动并调用对应的Servlet,Servlet根据客户端请求生成响应内容将其传给服务器,服务器将响应返回客户端。

  • 整合Filter(过滤器)
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@WebFilter("/*")
public class CustomFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("==========in CustomFilter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        log.info("in CustomFilter doFilter");
        filterChain.doFilter(servletRequest,servletResponse );
    }

    @Override
    public void destroy() {
        log.info("in CustomFilter destroy");
    }
}

Filter是客户和服务端中间的一道滤网,可通过其对请求的参数、响应等进行统一的处理,其中doFilter方法控制了请求是否继续执行,可以在这个方法中进行一些验证,如果验证通过可通过filterChain.doFilter方法来放行。@WebFilter("/*")可标注哪些路径会进入此过滤器。

  • 整合Listener(监听器)
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

import com.lei.tang.demo.service.log.LogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

@Slf4j
@WebListener
public class CustomListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        log.info("in CustomListner requestDestroyed");
    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        log.info("in CustomListner requestInitialized");
    }
}

监听器可用于监听Web应用中的某些对象的创建、销毁、增加、修改、删除等动作的发生。实现不同的接口监听不同的对象。

  • 实现HttpSessionListener监听session状态:sessionCreated(创建);sessionDestroyed(销毁)
  • 实现HttpSessionAttributeListener监听session属性:attributeAdded(增加);attributeRemoved(移除);attributeReplaced(修改)
  • 实现ServletContextListener监听上下文状态
  • 实现ServletContextAttributeListener监听上下文属性变化
  • 实现ServletRequestListener监听请求request状态
  • 实现ServletRequestAttributeListener监听请求request属性

在Spring Boot项目中如需要Servlet、Filter和Listener生效,需在启动类上添加@ServletComponentScan注解进行扫描到容器中。

如有不到之处,欢迎各位留言指正,不慎感激。
更多文章:
点击跳转CSDN博客
点击跳转简书博客
公众号:代码小搬运
扫码关注代码小搬运公众号

你可能感兴趣的:(Spring Boot整合Servlet、Filter和Listener)