javax.servlet.Filter的使用

来源:互联网 发布:java web 网上订餐系统 编辑:程序博客网 时间:2024/06/06 10:51

Filters是在请求资源(Servlet或静态内容)或者响应资源时,也可以在请求和响应同时进行时,执行过滤任务。
Filters通过doFilter方法来执行过滤的。每个过滤都要访问一个FilterConfig对象,该对象包含了初始参数,要引用的ServletContext对
象。例如,在调入资源时,执行过滤。
Filters是被配置在web.xml配置文件中的。
一些需要过滤器的情况:
(
1)认证Filter
(
2)日志和审核Filter
(
3)图片转换Filter
(
4)数据压缩Filter
(
5)密码Filter
(
6)令牌Filter
(
7)触发资源访问事件的Filter
(
8)XSL/TFilter
(
9)媒体类型链Filter
方法列表:
(
1)destory():当Filter从服务中去除时,由servletcontainer来调用。在Filter的doFilter()的所有线程退出时或在一个时间周期
结束后该方法仅会被调用一次。在webcontainer调用过该方法后,该filte的r实例将不会再调用doFilter()。
该方法提供给Filter一个清除任意资源的时机,这些资源可能是被保存的(例如,内存、文件句柄、线程)或确保持久状态是和在内存Filter
的状态是同步的。
(
2)doFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain):Filter的doFilter方法是
在每次一个请求或响应时被调用,来处理过滤链最后的客户端请求资源。FilterChain被传入到此方法中,允许过滤器将request,response
传递到过滤链的下一个过滤。
这个方法的典型设计应该是遵循以下的模式:
<1>检测request
<2>通过特定过滤器对请求数据的内容或头信息进行过滤,并重新封装成request对象
<3>通过特定过滤器对响应数据的内容或头信息进行过滤,并重新封装成response对象
<4>通过chian对象调用过滤链的下一个过滤器,或不传递request/response到过滤链的下一个过滤器从而阻挡请求处理。
<5>在过滤链的下一个过滤器被调用后,直接设置头信息到response对象
(
3)init(FilterConfigconfig):当Filter被放入到服务中时,由servletcontainer来调用。在实例化Filter后,init
会被调用一次。
有两种情况,容器不会将将Filter放入服务中:
<1>抛出ServletException时
<2>在容器规定的时间内没有返回实例

原创粉丝点击