过滤器概念和实现

    科技2022-08-06  109

    一、什么是过滤器

    它会在一组资源(jsp,servlet,css,html)前面出现,它可以让请求得到目标资源,也可以让请求得不到目标资源。 也就是说过滤器有拦截请求的能力。

    二、javax.servlet包中的Filter接口

    我们来看看这个接口中的方法: 三个方法,也就是过滤器的三个生命周期函数,init方法在服务器启动时执行,doFilter在拦截请求时执行,destroy方法在服务器关闭时执行

    FilterConfig: FilterConfig与ServletConfig类似,用于获取过滤器的名称,过滤器的初始化名称和初始化值,以及获取用于Servlet之间传递信息的ServletContext对象 在doFilter方法中,有三个参数,前两个参数是tomcat自动为我们包装的ServletRequest对象和ServletResponse对象,第三个参数是FilterChain对象,当只有一个拦截器时,那么该方法用于放行去获取目标资源,当具有多个拦截器时,该方法放行给下一个过滤器进行过滤操作

    三、过滤器实现

    ok,现在来实现一个过滤器,先创建一个HttpServlet的继承类,采用注解的方法实现

    @WebServlet(value = "/AServlet") public class AServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("I'm requesting"); } }

    当我们不加过滤器,启动tomcat服务器,浏览器一栏输入/Servlet对应的url 输出 我们再新建一个Filter接口的实现类

    @WebFilter(urlPatterns = "/AServlet") public class AFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("you are blocked by me"); // filterChain.doFilter(servletRequest,servletResponse); } @Override public void destroy() { } }

    拦截/AServlet请求,再来看看tomcat服务器下的输出 看以看到,请求已经被拦截

    Processed: 0.009, SQL: 8