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地址