Filter的开发和使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>            

 

以上是关于Filter的开发和使用的主要内容,如果未能解决你的问题,请参考以下文章

java---servlet与filter的联系与区别

微信小程序代码片段

servlet和filter的区别

JS常用代码片段2-值得收藏

JS常用代码片段2-值得收藏

高效Web开发的10个jQuery代码片段