熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

戲說java web開發中的listener和filter

2022-06-13   來源: Java核心技術 

  今天在公司看到有同事在寫filter晚上一個人在家無聊就想聊聊這個東西

  jsp開發中的監聽器和過濾器這兩個東西要說起來很大很繁今天我想用一個現實的例子來說明這兩個東東的作用

  案例描述

  假設你平時生活在北京有天你去一個很邊遠很貧窮的山村體驗生活到了那個山村後你想要什麼東西村長都會同意然後安排村民送給你但是有一點例外的是一旦你問他們要錢村長堅決不給還會帶領村民把你打回北京去

  你為了從村民那裡帶走盡量多的東西所以你在出發前准備了一個大袋子希望把村民給的東西都放到袋子裡然後你在回到城市後這個袋子就沒用了你就把這個袋子給扔了

  代碼模擬

  恩我想用如下簡單代碼來模擬以上案例大家可以想一下監聽器扮演者什麼角色?過濾器扮演什麼角色?

   新建一個java web project

   默認的indexjsp頁面上加上兩個鏈接模擬要村民要紅薯和要錢如下

  <html>

  <body>

  <h>歡迎掉入無名村哈哈</h><br>

  <a>給紅薯</a><br/>

  <a>給錢</a><br/>

  </body>

  </html>

   新建一個大布袋類BigBagjava如下

  packagechbdemoweb;

  importjavautilHashMap;

  publicclassBigBag{

  publicstaticHashMap<StringInteger>bag;//村民的東西就放在這個袋子裡

  }

   新建一個監聽器MyListenerjava如下

  packagechbdemoweb;

  importjavautilHashMap;

  importjavaxservletServletContextEvent;

  importjavaxservletServletContextListener;

  publicclassMyListenerimplementsServletContextListener{

  publicvoidcontextDestroyed(ServletContextEventarg){

  BigBagbag=null;

  Systemoutprintln(回城了讓掉爛袋子吧);

  }

  publicvoidcontextInitialized(ServletContextEventarg){

  BigBagbag=newHashMap<StringInteger>();

  Systemoutprintln(要進山了准備好布袋子);

  }

  }

   再新建一個過濾器MyFilterjava如下

  packagechbdemoweb;

  importjavaioIOException;

  importjavaxservletFilter;

  importjavaxservletFilterChain;

  importjavaxservletFilterConfig;

  importjavaxservletServletException;

  importjavaxservletServletRequest;

  importjavaxservletServletResponse;

  importjavaxservlethttpHttpServletRequest;

  importjavaxservlethttpHttpServletResponse;

  publicclassMyFilterimplementsFilter{

  publicvoiddestroy(){

  }

  publicvoiddoFilter(ServletRequestrequestServletResponseresponse

  FilterChainchain)throwsIOExceptionServletException{

  HttpServletRequestreq=(HttpServletRequest)request;

  HttpServletResponsersp=(HttpServletResponse)response;

  if(reqgetRequestURI()toString()endsWith(moneyjsp)){

  //什麼時候有過錢啊?打回北京去

  rspsendRedirect(gohomejsp);

  Systemoutprintln(什麼時候有過錢啊滾回家去!);

  return;

  }elseif(reqgetRequestURI()toString()endsWith(hongshujsp)){

  if(ntainsKey(hongshu)){

  intnum=BigBagbagget(hongshu)+;

  BigBagbagput(hongshunum);

  Systemoutprintln(得到第+num+個紅薯);

  }else{

  BigBagbagput(hongshu);

  Systemoutprintln(得到第個紅薯);

  }

  //村長同意了下面就是到村民家中拿了

  chaindoFilter(requestresponse);

  }else{

  //只要不要錢就行放行

  chaindoFilter(requestresponse);

  }

  }

  publicvoidinit(FilterConfigfilterConfig)throwsServletException{

  }

  }

   在webxml中配置監聽器和過濾器如下所示

  <?xmlversion=encoding=UTF?>

  <webappversion=xmlns=

  xmlns:xsi=instance

  xsi:schemaLocation=

  app__xsd>

  <filter>

  <filtername>myFilter</filtername>

  <filterclass>chbdemowebMyFilter</filterclass>

  </filter>

  <filtermapping>

  <filtername>myFilter</filtername>

  <urlpattern>/*</urlpattern>

  </filtermapping>

  <listener>

  <listenerclass>chbdemowebMyListener</listenerclass>

  </listener>

  <welcomefilelist>

  <welcomefile>indexjsp</welcomefile>

  </welcomefilelist>

  </webapp>

  好了大功告成部署運行觀察結果怎樣?

  分析結果

  我們會觀察到如下結果

  當服務啟動過程中控制台輸出要進山了准備好布袋子

  當點擊一下給紅薯的鏈接時控制台會輸出得到第x個紅薯

  當點擊一下給錢的鏈接時控制台輸出什麼時候有過錢啊滾回家去!

  怎麼樣?有點明白了?

  其實監聽器就是在服務啟動之前做好保證服務正常運行的准備工作服務結束的時候再善後一下對應案例中的情況就是在上路之前把袋子准備好回來了把袋子扔掉類似保姆的工作照顧孩子起床再照顧孩子睡下

  過濾器就是針對服務器的請求加以過濾限制對應案例中的情況就是村長了掌握著生殺大權什麼事都得過我這關才行^_^


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27012.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.