Filter&Listener

一祈噪、Filter

1.概念

當(dāng)訪問服務(wù)器的資源時(shí)尚辑,過濾器可以將請(qǐng)求攔截下來,完成一些特殊的功能杠茬。

2.作用

一般用于完成通用的操作。如:登錄驗(yàn)證宁赤、統(tǒng)一編碼處理栓票、敏感字符過濾...

3.快速入門

  1. 定義一個(gè)類,實(shí)現(xiàn)接口Filter
  2. 復(fù)寫方法
  3. 配置攔截路徑
    1. web.xml
    2. 注解
@WebFilter("/*")//訪問所有資源之前逗载,都會(huì)執(zhí)行該過濾器
public class FilterDemo1 implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    System.out.println("filterDemo1被執(zhí)行了....");
    //放行
    filterChain.doFilter(servletRequest,servletResponse);
  }
  @Override
  public void destroy() {

  }
}

4.web.xml注解

<filter>
  <filter-name>demo2</filter-name>
  <filter-class>cn.mouweng.web.filter.FilterDemo2</filter-class>
</filter>
<filter-mapping>
  <filter-name>demo2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

5.過濾器的執(zhí)行流程

1.執(zhí)行放行前的資源

2.執(zhí)行放行后的資源

3.回來執(zhí)行過濾器放行代碼下邊的代碼

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  // 對(duì)request請(qǐng)求的消息做增強(qiáng)
  System.out.println("FilterDemo2被執(zhí)行...");

  //放行
  filterChain.doFilter(servletRequest, servletResponse);

  // 對(duì)response請(qǐng)求的消息做增強(qiáng)
  System.out.println("FilterDemo2回來了...");
}

6.過濾器的生命周期

  • init:在服務(wù)器啟動(dòng)后厉斟,會(huì)創(chuàng)建Filter對(duì)象,然后調(diào)用init方法擦秽。只執(zhí)行一次漩勤。用于加載資源
  • doFilter:每一次請(qǐng)求被攔截資源時(shí)缩搅,會(huì)執(zhí)行。執(zhí)行多次
  • destroy:在服務(wù)器關(guān)閉后究飞,F(xiàn)ilter對(duì)象被銷毀堂鲤。如果服務(wù)器是正常關(guān)閉,則會(huì)執(zhí)行destroy方法瘟栖。只執(zhí)行一次。用于釋放資源

7.過濾器配置詳解

7.1 攔截路徑配置

  • 具體資源路徑:/index.jsp 只有訪問index.jsp資源時(shí)酬滤,過濾器才會(huì)被執(zhí)行
  • 攔截目錄: /user/* 訪問/user下的所有資源時(shí)寓涨,過濾器都會(huì)被執(zhí)行
  • 后綴名攔截: *.jsp 訪問所有后綴名為jsp資源時(shí),過濾器都會(huì)被執(zhí)行
  • 攔截所有資源:/* 訪問所有資源時(shí)嘴脾,過濾器都會(huì)被執(zhí)行

7.2 攔截方式的配置

攔截方式配置:資源被訪問的方式

設(shè)置dispatcherTypes屬性

  • REQUEST:默認(rèn)值蔬墩。瀏覽器直接請(qǐng)求資源
  • FORWARD:轉(zhuǎn)發(fā)訪問資源
  • INCLUDE:包含訪問資源
  • ERROR:錯(cuò)誤跳轉(zhuǎn)資源
  • ASYNC:異步訪問資源

web.xml配置

  • 設(shè)置<dispatcher></dispatcher>標(biāo)簽即可

8.過濾器鏈

執(zhí)行順序:如果有兩個(gè)過濾器:過濾器1和過濾器2

  • 過濾器1
  • 過濾器2
  • 資源執(zhí)行
  • 過濾器2
  • 過濾器1

順序設(shè)置:

  • 注解配置:按照類名的字符串比較規(guī)則比較,值小的先執(zhí)行拇颅;如: AFilter 和 BFilter,AFilter就先執(zhí)行了韵洋。
  • web.xml配置: <filter-mapping>誰定義在上邊黄锤,誰先執(zhí)行

二、Listener

1.概念

概念:web的三大組件之一鸵熟。

事件監(jiān)聽機(jī)制

  • 事件 :一件事情
  • 事件源 :事件發(fā)生的地方
  • 監(jiān)聽器 :一個(gè)對(duì)象
  • 注冊(cè)監(jiān)聽:將事件、事件源痹届、監(jiān)聽器綁定在一起。 當(dāng)事件源上發(fā)生某個(gè)事件后队腐,執(zhí)行監(jiān)聽器代碼

2.方法

ServletContextListener:監(jiān)聽ServletContext對(duì)象的創(chuàng)建和銷毀
void contextDestroyed(ServletContextEvent sce) :ServletContext對(duì)象被銷毀之前會(huì)調(diào)用該方法
void contextInitialized(ServletContextEvent sce) :ServletContext對(duì)象創(chuàng)建后會(huì)調(diào)用該方法

3.步驟

1.定義一個(gè)類柴淘,實(shí)現(xiàn)ServletContextListener接口

2.復(fù)寫方法

3.配置

web.xml

<listener>
    <listener-class>cn.mouweng.web.listener.ContextLoaderListener</listener-class>
</listener>

注解

@WebListener
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市千绪,隨后出現(xiàn)的幾起案子梗脾,更是在濱河造成了極大的恐慌盹靴,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稿静,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡控漠,警方通過查閱死者的電腦和手機(jī)悬钳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉渡,“玉大人母剥,你說我怎么就攤上這事』诽郏” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵淋叶,是天一觀的道長(zhǎng)等限。 經(jīng)常有香客問我芬膝,道長(zhǎng)形娇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任癣缅,我火速辦了婚禮哄酝,結(jié)果婚禮上友存,老公的妹妹穿的比我還像新娘。我一直安慰自己屡立,他們只是感情好搀军,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焚刺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乳愉。 梳的紋絲不亂的頭發(fā)上屯远,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音赂乐,去河邊找鬼咖气。 笑死挨措,一個(gè)胖子當(dāng)著我的面吹牛崩溪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播觉既,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼钧椰!你這毒婦竟也來了符欠?” 一聲冷哼從身側(cè)響起嫡霞,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤诊沪,失蹤者是張志新(化名)和其女友劉穎曾撤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挤悉,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年橄仆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衅斩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怠褐。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奈懒,死狀恐怖奠涌,靈堂內(nèi)的尸體忽然破棺而出磷杏,到底是詐尸還是另有隱情,我是刑警寧澤慈格,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布遥金,位于F島的核電站,受9級(jí)特大地震影響稿械,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一梯捕、第九天 我趴在偏房一處隱蔽的房頂上張望窝撵。 院中可真熱鬧,春花似錦锣笨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至璃赡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碉考,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工锌仅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墙贱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓伊脓,卻偏偏與公主長(zhǎng)得像魁衙,于是被迫代替她去往敵國和親报腔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纺棺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355