Java之Filter过滤器
Filter过滤器
配置方式:web.xml
<filter>
<filter-name>Demo097</filter-name>
<filter-class>cn.xinx.web.FilterDemo097</filter-class>
</filter>
<filter-mapping>
<filter-name>Demo097</filter-name>
<!-- 拦截路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器生命周期
init:在服务器启动后,会创建Filter对象,然后调用init方法;
doFilter:每一次请求被拦截资源时,会执行;
destroy:在服务器正常关闭后,Filter对象被销毁;释放资源;
注解方式:
@WebFilter("/*") 访问所有资源之前,都会执行该过滤器
过滤器配置
具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
拦截目录: /xin/* 访问/xin下的所有资源时,过滤器都会被执行
后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
拦截所有资源:/* 访问所有资源时,过滤器都会被执行
拦截方式配置: 配置资源被访问到的方式
注解配置:
设置dispatcherTypes属性
1 FEQUEST 默认 浏览器直接请求资源时拦截
2 FORWARD 转发 只有转发访问资源时拦截
3 INCLUDE 包含 包含访问资源
4 ERROR 错误 错误跳转资源
5 ASYNC 异步 异步访问资源
@WebFilter(value="/*", dispatcherTypes = DispatcherType.REQUEST) 请求时拦截
@WebFilter(value="/*", dispatcherTypes ={ DispatcherType.REQUEST, DispatcherType.FORWARD}) 请求和转发都拦截
web.xml配置:
设置<dispatcher> 5个值 </dispatcher>标签即可
过滤器链(配置多个过滤器)
执行顺序 执行顺序:如果有两个过滤器:过滤器1和过滤器2
1 - 2 - 资源 - 2 - 1
先后顺序问题:
注解配置:按照类名的字符串比较规则比较,值小的先执行
FilterA 和 FilterB A先执行,
web.xml配置: <filter-mapping>谁定义在上边,谁先执行