Spring Boot @WebServlet、@WebFilter、@WebListener的使用

Spring Boot @WebServlet、@WebFilter、@WebListener的使用

Laughing
2021-06-09 / 0 评论 / 867 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年03月17日,已超过306天没有更新,若内容或图片失效,请留言反馈。

三个注解都必须在启动类增加@ServletComponentScan才能够被扫描到。

@WebServlet

可用于根据不同条件,重定向请求至不同URL。
示例代码

@WebServlet(name = "/my")
@Slf4j
public class MyWebServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        log.info("进入get方法");
        log.info(req.getParameter("name"));
        doPost(req,resp);
    }

    @Override
    protected void doHead(HttpServletRequest req, HttpServletResponse resp) {
        log.info("进入get方法");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        log.info("进入post方法");
        log.info(req.getParameter("name"));
    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) {
        log.info("进入put方法");
    }

    @Override
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) {
        log.info("进入delete方法");
    }

    @Override
    protected void doOptions(HttpServletRequest req, HttpServletResponse resp) {
        log.info("进入option方法");
    }

    @Override
    public void destroy() {
        log.info("servlet>>>destroy");
    }

    @Override
    public void init() {
        log.info("servlet>>>init");
    }
}

使用postman分别通过getpostdelete等进行请求http://localhost:8080/my?name=张三,可以查看输出结果

@WebFilter

可用于拦截/过滤请求,提前对请求的request进行判断处理,在doFilter后过滤器放行,调用实际请求URL路径。
示例代码

@WebFilter("/my")
@Slf4j
public class MyWebFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("filter>>>init");
    }

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

    @Override
    public void destroy() {
        log.info("filter>>>destroy");
    }
}

再次请求,查看输出结果
[alt type="error"]注意看输出顺序[/alt]

@WebListener

在spring启动之前监听执行初始化操作,可用于提前加载缓存等。

@WebListener
@Slf4j
public class MyWebListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        log.info("requestDestroyed");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        log.info("requestInitialized");
    }
}

输出结果

0

评论 (0)

取消