Filter的开发和使用

  Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HTTPServletResponse进行后处理。与Servlet的区别在于:Filter不能直接向用户生成响应。其完成流程为:Filter对用户请求进行预处理,然后将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。Filter作用如下:

  1、在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest;

  2、根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据;

  3、在HttpServletResponse到达客户端之前,拦截HttpServletResponse;

  4、根据需要检查的HttpServletResponse,也可以修改HttpServletResponse头和数据;

  创建Filter只需两个步骤:

  1、创建Filter类;

  2、在web.xml中配置Filter;

创建Filter必须实现javax.servlet.Filter接口,该接口中定义了3个方法:

  void init(FilterConfig config):用于完成Filter初始化。

  void destroy():用于Filter销毁前,完成某些资源回收。

  void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):实现了核心的过滤功能,对请求增加额外处理。

  在doFilter()中,通过chain.doFilter()方法来划分对请求的预处理和对服务器响应的后处理。位于chain.doFilter()之前的代码是预处理,位于chain.doFilter()方法之后的是后处理。

  Filter需配置两部分内容:

  配置Filter名:<filter/>;

  配置Filter拦截URL模式:<filter-mapping/>;

配置实例如下:

<!--定义Filter-->
<filter>
    <!--Filter名字-->
    <filter-name>myFilter</filter-name>
   <!--Filter的实现类-->
    <filter-class>com.MyFilter</filter-class>
   <!--使用init-param配置参数-->
    <init-param>
        <!--定义参数名字-->
        <param-name>encoding</param-name>
        <!--定义参数值-->
        <param-value>GBK</param-value>
    </init-param>
</filter>
<!--定义Filter拦截的URL地址-->
<filter-mapping>
    <!--Filter名字-->
    <filter-name>myFilter</filter-name>
    <!--Filter负责拦截的URL-->
    <url-pattern>/*</url-pattern>
</filter-mapping>            
原文地址:https://www.cnblogs.com/runnigwolf/p/5226179.html