12. 过滤器(Filter).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
12. 过滤器(Filter)

过滤器(Filter) 1、概述 过滤器,又叫拦截器,属于Servlet中的技术,Since Servlet2.3。使用Filter技术可以对web服务器管理的所有web资源,例如JSP、Servlet、静态资源等进行拦截,从而实现一些特殊的功能(后面会有八个案例)。 2、快速入门 1)过滤器编写步骤 ① 在Web工程中新建Java类实现Filter接口,并实现doFilter()方法【可打印一句话,来证明能够进行拦截】 public class FilterDemo1 implements Filter { // 应用被加载时完成过滤器的实例化 public FilterDemo1() { System.out.println(调用了默认构造方法); } // 初始化:服务器传入FilterConfig参数 public void init(FilterConfig filterConfig) throws ServletException { System.out.println(调用初始化方法); } // 用户每次访问被过滤资源都会调用过滤器的doFilter方法 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println(FilterDemo1第一次拦截); // 对request、response进行预处理,代码放在chain.doFilter()前 chain.doFilter(request, response);// 放行 // 对响应信息进行拦截,代码放在chain.doFilter()后 System.out.println(FilterDemo1第二次拦截); } // 应用从服务器上卸载时调用销毁方法 public void destroy() { System.out.println(调用销毁方法); } } ② 在web.xml中配置Filter(filter、filter-mapping元素),指定拦截范围【类似Servlet配置,配置完成后,访问一个页面,看看拦截效果】: filter filter-nameFilterDemo1/filter-name filter-classorg.flyne.filter.FilterDemo1/filter-class /filter filter-mapping filter-nameFilterDemo1/filter-name url-pattern/*/url-pattern /filter-mapping /* 表示过滤器可以过滤用户请求的任意web资源。当用户访问一个页面时,就会被FilterDemo1拦截,并打印FilterDemo1第一次拦截,返回时,会再次经过该Filter,打印FilterDemo1第二次拦截。执行过程见概述中的图。 2)doFilter()方法 WEB服务器每次在调用web资源之前,都会先调用doFilter方法,因此,在该方法内编写代码可达到如下目的: ① 调用目标资源之前,对request、response进行预处理 ② 是否调用目标资源,即是否让用户访问web资源 Web服务器在调用doFilter方法时,会传递一个filterChain对象进来,它也提供了一个doFilter方法,我们可以根据需求决定是否调用此方法,调用该方法,则web资源就会被访问(放行),否则web资源不会被访问(一直处于拦截状态)。 ③ 调用目标资源之后,对响应信息进行过滤 3)Filter链(FilterChain) ① 在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。 ② Web服务器根据Filter在web.xml文件中的注册顺序(按filter-mapping元素的顺序),决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,Web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。 在doFilter方法中,如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。 3、一些细节问题 1)Filter生命周期 诞生(init):过滤器的实例是在应用被加载时就完成的实例化,并初始化的。 存活

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档