Filter简介:
Filter被称之为过滤器,它的基本功能是对servlet容器调用servlet的过程进行过滤,从而在servlet进行响应处理前后做一些操作。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。

Filter过滤器实现的是javax.servlet.Filter接口的类,而在javax.servlet.Filter中定义了以下三个方法:

- init(FilterConfig fConfig)
init()方法用来初始化过滤器,可以在init()方法中获取Filter中的初始化参数。

String username = filterConfig.getInitParameter("username");

- doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
doFilter()方法完成过滤操作。当请求发过来的时候,过滤器将执行doFilter方法。
在HttpServletRequest 执行doFilter()之前,根据需要检查 HttpServletRequest ,同时也可以修改HttpServletRequest 请求头和数据。
在HttpServletResponse 执行doFilter()之后,根据需要检查 HttpServletResponse ,同时也可以修改HttpServletResponse响应头和数据。

        //设置编码格式
        response.setContentType("text/html;charset=utf-8");
        response.setCharacterEncoding("utf-8");
        //添加name属性
        request.setAttribute("name", "tom");
        System.out.println("denlguFiletr处理 之前");
        //过滤器
        chain.doFilter(request, response);
        response.getWriter().println("<br>");
        response.getWriter().println("经过filter的处理了");
        System.out.println("denlguFiletr处理 之后 ");

- destroy()
Filter对象创建后会驻留在内存,当web应用移除或服务器停止时调用destroy()方法进行销毁。在Web容器卸载 Filter 对象之前被调用。destroy()方法在Filter的生命周期中仅执行一次。通过destroy()方法,可以释放过滤器占用的资源。

xml文件中配置Filter过滤器:

<filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>com.login.SessionFilter</filter-class>
    <init-param>
        <param-name>name</param-name>
        <param-value>aaa</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Filter过滤器执行顺序:
web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐