实现servlet过滤器需要使该类实现Filter接口并设置拦截对象,同时还要重写Filter接口的三个方法,如下所示:

    1. package com.wjh.Test;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebFilter;
    4. import java.io.IOException;
    5. @WebFilter("/servlet01")//拦截servlet01的请求,当参数是“/*”时表示拦截所有的请求(包括到请求到servlet类、jsp、html...)
    6. public class Filter01 implements Filter {
    7. @Override
    8. public void init(FilterConfig filterConfig) throws ServletException {
    9. System.out.println("Filter01的生命周期开始...");
    10. }
    11. @Override
    12. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    13. System.out.println("Filter01对该请求进行了拦截...");
    14. filterChain.doFilter(servletRequest,servletResponse);//放行被拦截的资源,如果不放行的话,请求就无法到达相应的文件
    15. }
    16. @Override
    17. public void destroy() {//释放该类的资源
    18. System.out.println("Filter01的生命周期结束...");
    19. }
    20. }
    1. package com.wjh.Test;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. @WebServlet("/servlet01")
    9. public class servlet01 extends HttpServlet {
    10. @Override
    11. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. System.out.println("请求到达了servlet01...");
    13. }
    14. }
    1. package com.wjh.Test;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. @WebServlet("/servlet02")
    9. public class servlet02 extends HttpServlet {
    10. @Override
    11. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. System.out.println("请求到达了servlet02...");
    13. }
    14. }

    运行结果:
    访问servlet01:
    image.png
    访问servlet02:
    image.png
    可以看见,过滤器只是拦截了被设置好的servlet01

    如过设置了多个过滤器,那么过滤器的名字的首字母小的先执行,而响应却刚好反过来。