二砂代、Filter介紹

Filter的主要作用于對(duì)用戶進(jìn)行預(yù)處理到忽,也可以對(duì)HttpServletResponse進(jìn)行后處理蜜托,是個(gè)典型的吃力鏈抄囚。使用Filter的完整流程:Fileter對(duì)用戶請(qǐng)求進(jìn)行預(yù)處理,接著把請(qǐng)求交個(gè)Servlet進(jìn)行處理并生成響應(yīng)橄务,最后Filter再對(duì)服務(wù)器響應(yīng)進(jìn)行后處理幔托。

Filter的用處:

  • 在HttpServletRequest到達(dá)Servlet之前,來(lái)接客戶的HttpServletRequest蜂挪。
  • 根據(jù)需要檢查HttpServletRequest重挑,也可以修改HttpServletRequest頭和數(shù)據(jù)。
  • 在HttpServletResponse到達(dá)客服端之前棠涮,攔截HttpServletResponse谬哀。
  • 根據(jù)需要檢查HttpServletResponse,也可以修改HttpServletResponse頭和數(shù)據(jù)严肪。

Filter的種類:

  • 用戶授權(quán)的Filter:Filter負(fù)責(zé)檢查用戶請(qǐng)求史煎,根據(jù)請(qǐng)求過(guò)濾用戶非法請(qǐng)求。
  • 日志Filter:詳細(xì)記錄某些特殊的用戶請(qǐng)求驳糯。
  • 負(fù)責(zé)解碼的Filter:包括對(duì)非標(biāo)準(zhǔn)編碼的請(qǐng)求解碼篇梭。
  • 能改變XML內(nèi)容的XSLT Filter等。
  • Filter可負(fù)責(zé)攔截多個(gè)請(qǐng)求或響應(yīng)酝枢,一個(gè)請(qǐng)求或響應(yīng)也可被多個(gè)Filter攔截恬偷。

創(chuàng)建Filter的兩步:

  • 創(chuàng)建Filter處理類。
  • web.xml文件中配置Filter帘睦。

2.1創(chuàng)建Filter類

創(chuàng)建Filter必須實(shí)現(xiàn)javax.servlet.Filter接口袍患,該接口中定義了三個(gè)方法:

  • void init(FilterConfig config):用于完成Filter的初始化坦康。
  • void destroy():用于Filter銷毀前,完成某些資源的回收诡延。
  • void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):實(shí)現(xiàn)過(guò)濾功能滞欠,該方法就是對(duì)每個(gè)請(qǐng)求及相應(yīng)增加的額外處理。

2.2配置Filter

  • 配置Filter名肆良。
  • 配置Filter攔截URL模式仑撞。

Servlet和Filter的區(qū)別:Servlet通常只配置一個(gè)URL,而Filter可以同時(shí)攔截多個(gè)請(qǐng)求的URL妖滔。因此在配置Filter的URL模式時(shí)通常會(huì)使用模式字符串,使得Filter可以攔截多個(gè)請(qǐng)求桶良。

配置Filter的兩種方式:

  • 在Filter類中通過(guò)注解來(lái)配置座舍。
  • 在web.xml中通過(guò)配置文件進(jìn)行配置。

web.xml

<!--定義Filter-->
<filter>
  <!--Filter的名字陨帆,相當(dāng)于指定@WebFilter的filtername屬性-->
  <filter-name>log</filter-name>
  <!--Filter的實(shí)現(xiàn)類-->
  <filter-class>lee.LogFilter</filter-class>
</filter>
<!--定義Filter攔截URL地址-->
<filter-mapping>
   <filter-name>log</filter-name>
   <!--Filter負(fù)責(zé)攔截的URL曲秉,相當(dāng)于指定@WebFilter的urlPatterns屬性-->
   <utl-pattern>/*<utl-pattern>
</filter-mapping>

web.xml中為Filter配置參數(shù):

<!--定義Filter-->
<filter>
  <!--Filter的名字,相當(dāng)于指定@WebFilter的filtername屬性-->
  <filter-name>log</filter-name>
  <!--Filter的實(shí)現(xiàn)類-->
  <filter-class>lee.LogFilter</filter-class>
  <!--為Filter配置參數(shù)-->
  <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
  </init-param>
</filter>
<!--定義Filter攔截URL地址-->
<filter-mapping>
   <filter-name>log</filter-name>
   <!--Filter負(fù)責(zé)攔截的URL疲牵,相當(dāng)于指定@WebFilter的urlPatterns屬性-->
   <utl-pattern>/*<utl-pattern>
</filter-mapping>

2.3使用URL Rewrite實(shí)現(xiàn)網(wǎng)站偽靜態(tài)

對(duì)于Java Web應(yīng)用來(lái)說(shuō)承二,要實(shí)現(xiàn)偽靜態(tài):可以通過(guò)Filter攔截所有發(fā)向.html請(qǐng)求,然后按照某種規(guī)則將請(qǐng)求forward到實(shí)際的.jsp頁(yè)面纲爸。**

URL Rewrite實(shí)現(xiàn)網(wǎng)站偽靜態(tài):

  • 登錄http://code.google.com/p/urlrewritefilter/downloads/list 站點(diǎn)下載Url Rewrite亥鸠。
  • 下載URL Rewrite。直接下載他的urlrewritefilter-4.0.3.jar即可识啦,并將該jar報(bào)復(fù)制到Web應(yīng)用的WEB-INF\lib目錄下负蚊。
  • 在web.xml文件中配置啟用URL Rewrite Filter,在web.xml文件中增加如下配置片段颓哮。
<!--定義Filter-->
<filter>
  <!--Filter的名字家妆,相當(dāng)于指定@WebFilter的filtername屬性-->
  <filter-name>UrlRewriteFilter</filter-name>
  <!--Filter的實(shí)現(xiàn)類-->
  <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<!--定義Filter攔截URL地址-->
<filter-mapping>
   <filter-name>UrlRewriteFilter</filter-name>
   <!--Filter負(fù)責(zé)攔截的URL,相當(dāng)于指定@WebFilter的urlPatterns屬性-->
   <utl-pattern>/*<utl-pattern>
</filter-mapping>
  • 在應(yīng)用的WEB-INF路徑下增加urlrewrite.xml文件冕茅,該文件定義了偽靜態(tài)映射規(guī)則伤极,這份偽靜態(tài)規(guī)則是基于正則表達(dá)式的。

urlrewrite.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
   "http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
  <rule>
       <!--所有配置如下正則表達(dá)式的請(qǐng)求-->
       <from>/userinf-(\w*).html</form>
       <!--將被forward到如下JSP頁(yè)面姨伤,其中$1代表上面一個(gè)正則表達(dá)式所匹配的字符串-->
      <to type="forward"></userinf.jsp?username=$1</to>
  </rule>
</urlrewrite>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哨坪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子姜挺,更是在濱河造成了極大的恐慌齿税,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炊豪,死亡現(xiàn)場(chǎng)離奇詭異凌箕,居然都是意外死亡拧篮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)牵舱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)串绩,“玉大人,你說(shuō)我怎么就攤上這事芜壁〗阜玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵慧妄,是天一觀的道長(zhǎng)顷牌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)塞淹,這世上最難降的妖魔是什么窟蓝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮饱普,結(jié)果婚禮上运挫,老公的妹妹穿的比我還像新娘。我一直安慰自己套耕,他們只是感情好谁帕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著冯袍,像睡著了一般匈挖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上康愤,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天关划,我揣著相機(jī)與錄音,去河邊找鬼翘瓮。 笑死贮折,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的资盅。 我是一名探鬼主播调榄,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呵扛!你這毒婦竟也來(lái)了每庆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤今穿,失蹤者是張志新(化名)和其女友劉穎缤灵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腮出,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年帖鸦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胚嘲。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡作儿,死狀恐怖解愤,靈堂內(nèi)的尸體忽然破棺而出隶垮,到底是詐尸還是另有隱情卜高,我是刑警寧澤速和,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站颅痊,受9級(jí)特大地震影響火脉,放射性物質(zhì)發(fā)生泄漏牵寺。R本人自食惡果不足惜械姻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一寝志、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧策添,春花似錦、人聲如沸毫缆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苦丁。三九已至浸颓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旺拉,已是汗流浹背产上。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛾狗,地道東北人晋涣。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沉桌,于是被迫代替她去往敵國(guó)和親谢鹊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 本文包括:1留凭、Filter簡(jiǎn)介2佃扼、Filter是如何實(shí)現(xiàn)攔截的?3蔼夜、Filter開(kāi)發(fā)入門(mén)4兼耀、Filter的生命周期...
    廖少少閱讀 7,248評(píng)論 3 56
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器瘤运,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在窍霞,面了一些公司,掛了不少尽超,但最終還是拿到小米官撼、百度、阿里似谁、京東傲绣、新浪、CVTE巩踏、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,184評(píng)論 11 349
  • 徐崢面對(duì)初戀時(shí)未能實(shí)現(xiàn)的吻耿耿于懷秃诵,其實(shí)他對(duì)杜鵑沒(méi)有更多的感情,這只是一個(gè)遺憾塞琼,徐崢想彌補(bǔ)這個(gè)遺憾菠净,也只是想找回那...
    Link李佳閱讀 300評(píng)論 0 1
  • 近期江歌事件頻繁刷屏毅往,其中事件中劉鑫已經(jīng)成為大家的眾矢之的,是怎樣的心理驅(qū)使劉鑫做出事故發(fā)生后的一系列舉動(dòng)派近?本篇文...
    沃小邦閱讀 829評(píng)論 0 0