亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Filter如何工作

標簽:
深度學習

在 web.xml 文件中通过<filter>和<filter-mapping>标签组合对编写的filter类进行注册,并设置它所能拦截的资源

实际上,Filter可以完成与Serlvlet一样的工作,甚至比Servlet使用起来更加灵活,因为它除了提供了request和response对象外,还提供了一个FiterChain链对象,他可以让我们更加灵活地控制请求的流转.


5bdc12bb0001308e09740294.jpg

Filter相关的类结构图

在Tomcat中,FilterConfig和FilterChain的实现类分别是从ApplicationFilterConfig和ApplcationFIterChian,而Fitler
的实现类由用户自定义,只要实现了FIlter接口中定义的三个接口即可,这三个接口与在Servlet中的类似.只不过还有一个AlllicationFilterChain类,此类可以将多个Filter串联成链.
详细看下Filter中的三个接口方法

  • init<FilterConfig>:初始化接口,在用户自定义的Filter初始化时被调用,它与Servlet的init方法作用一致,FilterCongfig与ServletConfig也类似,除了都能取到容器的环境类ServletContext对象之外,还能获取在<filter>下配置的<init-param>参数值

  • doFilter(ServletRequest,ServResponse,FilterChain):在每个用户的请求进来时都会调用此方法,并在Servlet的service方法前被调用,而FilterChjain就代表当前的整个请求链,所以通过调用doFilter可以将请求继续传递下去.若想拦截此请求,可不调用doFilter,那么该请求就直接反悔了,所以Filter是一种责任链设计模式.

  • destroy:当Filter对象被销毁时,该方法被调用.注意:当Web容器调用该方法后,容器就会再调用一次doFilter方法.

Filter类的核心哈市传递的FilterChain对象,该对象保存了到最终Servlet对象的所有Filter对象,这些对象都保存在ApplicationFilterChain对象的filters数组中.在FilterChain链上每执行一个Filter对象,数组的当前计数加一,直到计数等于数组的长度,当FilterChain上所有的Filter对象执行完成后,就会执行最终的Servl.所以在ApplicationFilterChain对象中会持有Servle对象的引用


5bdc12bb0001fce308310622.jpg

Filter执行时序图



作者:芥末无疆sss
链接:https://www.jianshu.com/p/65fa43810ed2
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消