亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Java Web 監聽器

系統 1769 0

先說一下什么是監聽器,監聽器也叫Listener,是Servlet的監聽器,它可以監聽客戶端的請求、服務端的操作等。通過監聽器,可

以自動激發一些操作,比如監聽在線的用戶的數量。當增加一個HttpSession時,就激發sessionCreated(HttpSessionEvent?? se)方法,這樣

就可以給在線人數加1。常用的監聽接口有以下幾個:

ServletContextAttributeListener監聽對ServletContext屬性的操作,比如增加、刪除、修改屬性。??

ServletContextListener監聽ServletContext。當創建ServletContext時,激發contextInitialized(ServletContextEvent?? sce)方法;當銷

毀ServletContext時,激發contextDestroyed(ServletContextEvent?? sce)方法。??

HttpSessionListener監聽HttpSession的操作。當創建一個Session時,激發session?? Created(HttpSessionEvent?? se)方法;當銷毀一個

Session時,激發sessionDestroyed?? (HttpSessionEvent?? se)方法。??

HttpSessionAttributeListener監聽HttpSession中的屬性的操作。當在Session增加一個屬性時,激發attributeAdded

(HttpSessionBindingEvent?? se)?? 方法;當在Session刪除一個屬性時,激發attributeRemoved(HttpSessionBindingEvent?? se)方法;當

在Session屬性被重新設置時,激發attributeReplaced(HttpSessionBindingEvent?? se)?? 方法。?

下面帖上一個簡單的配置

Xml代碼?? 收藏代碼
  1. < listener > ??
  2. ?????? < listener-class > listener.MySessionListener </ listener-class > ??
  3. ?? </ listener > ??

?把它放到<web-app>里

再建一個監聽類

Java代碼?? 收藏代碼
  1. package ?listener;??
  2. ??
  3. import ?javax.servlet.http.HttpSessionEvent;??
  4. import ?javax.servlet.http.HttpSessionListener;??
  5. ??
  6. public ? class ?MySessionListener? implements ?HttpSessionListener?{??
  7. ? public ? void ?sessionCreated(HttpSessionEvent?se)?{??
  8. ?? //?當session建立時觸發 ??
  9. ??System.out.println( "當session建立時觸發" );??
  10. ?}??
  11. ??
  12. ? public ? void ?sessionDestroyed(HttpSessionEvent?se)?{??
  13. ?? //?當session銷毀時觸發 ??
  14. ??System.out.println( "當session銷毀時觸發" );??
  15. ?}??

?}

這樣就配置成功了,打開頁面時就會輸出當session建立時觸發,退出時輸出當session銷毀時觸發!

下面我們開發一個 具體的例子 ,這個監聽器能夠統計在線的人數。在ServletContext初始化和銷毀時,在服務器控制臺打印對應的信息。當ServletContext里的屬性增加、改變、刪除時,在服務器控制臺打印對應的信息。??
????????? 要獲得以上的功能,監聽器必須實現以下3個接口:???
??????????????
? HttpSessionListener???
??????????????
? ServletContextListener???
??????????????
? ServletContextAttributeListener?????
????
????????? 我們看具體的代碼,見示例14-9。?????
????
????????? 【程序源代碼】?????
???

Java代碼?? 收藏代碼
  1. ? //???====================???Program???Discription???=====================??? ??
  2. ? //???程序名稱:示例14-9???:???EncodingFilter???.java??? ??
  3. ? //???程序目的:學習使用監聽器??? ??
  4. //???==============================================================??? ??
  5. ? import ???javax.servlet.http.*;?????
  6. ? import ???javax.servlet.*;?????
  7. ?????
  8. ? public ??? class ???OnLineCountListener??? implements ???HttpSessionListener,?????
  9. ServletContextListener,ServletContextAttributeListener?????
  10. ?{?????
  11. ? private ??? int ???count;?????
  12. ? private ???ServletContext???context???=??? null ;?????
  13. ?????
  14. ? public ???OnLineCountListener()?????
  15. ?{?????
  16. ?count= 0 ;?????
  17. ? //setContext();??? ??
  18. ?}?????
  19. ? //創建一個session時激發??? ??
  20. public ??? void ???sessionCreated(HttpSessionEvent???se)???????
  21. ?{?????
  22. ?count++;?????
  23. ?setContext(se);?????
  24. ?????
  25. ?}?????
  26. ? //當一個session失效時激發??? ??
  27. public ??? void ???sessionDestroyed(HttpSessionEvent???se)???????
  28. ?{?????
  29. ?count--;?????
  30. ?setContext(se);?????
  31. ?}?????
  32. ? //設置context的屬性,它將激發attributeReplaced或attributeAdded方法??? ??
  33. public ??? void ???setContext(HttpSessionEvent???se)?????
  34. ?{?????
  35. ?se.getSession().getServletContext().?????
  36. etAttribute( "onLine" , new ???Integer(count));?????
  37. ?}?????
  38. ??? //增加一個新的屬性時激發??? ??
  39. public ??? void ???attributeAdded(ServletContextAttributeEvent???event)???{?????
  40. ?????
  41. ?log( "attributeAdded('" ???+???event.getName()???+??? "',???'" ???+?????
  42. ?????????event.getValue()???+??? "')" );?????
  43. ?????
  44. ?????????}?????
  45. ?????????????
  46. ??????? //刪除一個新的屬性時激發??? ??
  47. ???????? public ??? void ???attributeRemoved(ServletContextAttributeEvent???event)???{?????
  48. ?????
  49. ?log( "attributeRemoved('" ???+???event.getName()???+??? "',???'" ???+?????
  50. ?????????event.getValue()???+??? "')" );?????
  51. ?????
  52. ?????????}?????
  53. ?????
  54. ? //屬性被替代時激發??? ??
  55. ???????? public ??? void ???attributeReplaced(ServletContextAttributeEvent???event)???{?????
  56. ?????
  57. ?log( "attributeReplaced('" ???+???event.getName()???+??? "',???'" ???+?????
  58. ?????????event.getValue()???+??? "')" );?????
  59. ?????????}?????
  60. ????????? //context刪除時激發??? ??
  61. ?????????? public ??? void ???contextDestroyed(ServletContextEvent???event)???{?????
  62. ?????
  63. ?log( "contextDestroyed()" );?????
  64. ? this .context???=??? null ;?????
  65. ?????
  66. ?????????}?????
  67. ?????
  68. ????????? //context初始化時激發??? ??
  69. ???????? public ??? void ???contextInitialized(ServletContextEvent???event)???{?????
  70. ?????
  71. ? this .context???=???event.getServletContext();?????
  72. ?log( "contextInitialized()" );?????
  73. ?????
  74. ?????????}?????
  75. ????????? private ??? void ???log(String???message)???{?????
  76. ?????
  77. ?????????System.out.println( "ContextListener:???" ???+???message);?????
  78. ?????????}???????????
  79. ?}?????

?????
?????????? 【程序注解】 ???
????????? 在OnLineCountListener里,用count代表當前在線的人數,OnLineCountListener將在Web服務器啟動時自動執行。當

OnLineCountListener構造好后,把count設置為0。每增加一個Session,OnLineCountListener會自動調用sessionCreated(HttpSessionEvent?

?se)方法;每銷毀一個Session,OnLineCountListener會自動調用sessionDestroyed(HttpSessionEvent?? se)方法。當調用sessionCreated

(HttpSessionEvent?? se)方法時,說明又有一個客戶在請求,此時使在線的人數(count)加1,并且把count寫到ServletContext中。

ServletContext的信息是所有客戶端共享的,這樣,每個客戶端都可以讀取到當前在線的人數。?????
????
? 為了使監聽器生效,需要在web.xml里進行配置,如下所示:?????
????
?

Xml代碼?? 收藏代碼
  1. < listener > ?????
  2. ?????????????????? < listener-class > OnLineCountListener </ listener-class > ?????
  3. ?????????? </ listener > ?????

?????
? 測試程序:?????
????
?

Html代碼?? 收藏代碼
  1. < %@???page??? contentType = "text/html;charset=gb2312" ???% > ?????
  2. ??????
  3. ??目前在線人數:???????
  4. ??????
  5. ?? < font ??? color = red > < %=getServletContext().getAttribute("onLine")% > </ font > < br > ?????
  6. ??????
  7. ??退出會話:???????
  8. ??????
  9. ?? < form ??? action = "exit.jsp" ??? method = post > ?????
  10. ?? < input ??? type = submit ??? value = "exit" > ?????
  11. ?? </ form > ?????
  12. ??????
  13. ??getServletContext().getAttribute("onLine")獲得了count的具體值。客戶端調用???????
  14. ??????
  15. ?? < %session.invalidate()???;% > ?????

?
????
????????? 使Session失效,這樣監聽器就會使count減1。?????
????
????????? 【運行程序】???
????????? web.xml做好以上的配置,把OnLineCountListener放在WEB-INF/class目錄下,啟動Web服務器,在瀏覽器里輸入以下URL(根據具體

情況不同): http://127.0.0.1:8080/ch14/listener.jsp ?????
????
????????? 瀏覽器將會打印目前在線人數。在服務器端有以下輸出:?????
????
?

Java代碼?? 收藏代碼
  1. …?????
  2. ??ContextListener:???contextInitialized()?????
  3. ??ContextListener:???attributeReplaced('org.apache.?????
  4. ??catalina.WELCOME_FILES ',???' [Ljava.lang.String; @1d98a ')?????
  5. ??…?????
  6. ??ContextListener:???attributeAdded( 'onLine' ,??? '1' )?????
  7. ??ContextListener:???attributeReplaced( 'onLine' ,??? '1' )?????
  8. ??ContextListener:???attributeReplaced( 'onLine' ,??? '0' )?????
  9. ??ContextListener:???attributeReplaced( 'onLine' ,??? '1' )?????
  10. ??ContextListener:???attributeReplaced( 'onLine' ,??? '2' ) ?

Java Web 監聽器


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎最新网 | 婷婷综合久久中文字幕一本 | 狠狠躁夜夜躁人人爽天天不 | 日韩亚洲欧美一区二区三区 | 欧美精品国产日韩综合在线 | 欧美一级毛片一级 | 在线成人欧美 | 综合网五月 | 伊人情人综合成人久久网小说 | 午夜欧美性视频在线播放 | 午夜在线网址 | 久久9966e这里只有精品 | 夜夜操国产 | 久久久国产一区二区三区 | 久久精品国产三级不卡 | 国产精品偷伦视频免费观看的 | 日本午夜免费理论片 | 亚洲欧美另类在线视频 | 天堂va | 女孕学护士一级毛片 | 成人在线观看国产 | 亚洲国产欧美久久香综合 | 成人公开视频 | 一级毛片免费播放视频 | 精品综合久久久久久99 | 久久国产精品一区二区三区 | 牛牛影院成人免费网页 | 色天使久久综合网天天 | 精品午夜寂寞影院在线观看 | 夜色伊人 | 亚洲欧美日韩激情在线观看 | xx欧美老妇 | 久青草免费视频手机在线观看 | 四虎成人在线 | 久久精品福利视频 | 国产a级高清版毛片 | 久久欧美 | 99久久精品国产国产毛片 | 国产精品视频一区二区猎奇 | 国产一级免费在线观看 | 日韩中文字幕在线不卡 |