filter作用
从J2EE1.3开始,Servlet2.3规范中加入了对过滤器的支持,实现javax.servlet.Filter接口。过滤器能够对目标资源的请求、响应进行截取。
Filter-class中指定的自定义过滤器必须继承javax.servlet.Filter,且必须实现下面3个方法:
init()方法负责初始化,一般情况下读取配置文件中的init-param参数值。
doFilter()负责过滤的业务逻辑,且能通过chain.doFilter()交给下一个控制器。
destroy()方法负责销毁资源。
filter工作方式
第一种:request过滤器。只有直接访问该目标资源时该过滤器才会起作用。
第二种:forward过滤器。对转发到目标资源的请求过滤。
第三种:include过滤器。
在JSP页面中的动作:<jsp:include page=.......
在Java代码中的动作:request.getRequestDispatcher
("....").include
注意:如果目标资源1通过<%@ include file="目标资源2"%指令,这时此过滤器不工作。
第四种:error过滤器。配置了过滤器对错误页面进行过滤,正常请求不会拦截,当出现错误的时候,会跳转到改过滤器。
filter调用顺序
在web.xml中过滤器的调用顺序,是由<filter-mapping/>元素的定义位置来决定的,哪个filter的<filter-mapping/>元素在前面则哪个filter首先被调用。
filter的作用范围(dispatcher)
Filter的作用范围是由dispatcher属性来指定,该属性默认值是request。
Dispatcher属性含义是:该过滤器对哪些途径来的资源来进行过滤。这些途径可以是请求、转发、包含、声明式错误。
<filter/>标签
<filter-name/>指定Filter的名字,方便引用。
<filter-class/>指定Filter的实现类。
<filter-mapping/>标签
<filter-name/>引用的Filter名字。
<url-pattern/>指定Filter负责拦截的URL地址。
<dispatcher/>指定Filter作用范围。
<url-pattern/>匹配规则
精确路径匹配优先、最长路径匹配优先、扩展匹配。
在web.xml文件中,以下语法用于定义映射:
1.以”/”开头和以”/*”结尾的,是用来做路径映射的
2.以前缀”*.”开头的,是用来做扩展映射的。
3.只有”/”的,是用来定义default servlet映射的。
4.剩下的都是用来定义详细映射的。