servlet过滤器使用

servlet的过滤器夹在用户和servlet之间,可以截获并预处理或者打断{用户到servlet的请求或servlet到用户的响应},但本身并不能处理和响应用户请求。

filter类必须实现Filter接口的三个方法:

  init:在web应用程序启动时就根据web.xml中的配置来创建每个filter的实例

  doFilter:用户请求对应的被过滤的url时执行

  destroy:web容器卸载filter时执行

对同一个request,可以有多少filter,根据在web.xml中filter定义的顺序形成filter链(chain)。

web.xml中先声明的先执行doFilter,在doFilter里有一个chain.doFilter(request, response);继续执行filter链里下一个filter的doFilter方法。doFilter方法大致如:执行前处理块====chain.doFilter(request, response);=====执行后处理。所以后声明的会先执行完doFilter方法。

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

web.xml里定义的filter可以通过init-param设置filter执行init的参数。filter-mapping设置了该过滤器对应的url地址

posted @ 2016-04-28 00:38  toffrey  阅读(211)  评论(0编辑  收藏  举报