日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

大数据WEB阶段(十六)JavaEE三大 核心技术之监听器Listener

發布時間:2024/4/30 java 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据WEB阶段(十六)JavaEE三大 核心技术之监听器Listener 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Listener監聽器

一、概述

  • Servlet三大核心技術之一 Servlet、Filter、Listener
  • Servlet技術規范中定義了八種監聽器用來監聽web應用開發中對應的事件。
  • 監聽器可以用來監聽web應用執行過程中相關的事件 , 來進行相應的處理
  • 二、 開發一個監聽器

  • 寫一個類實現監聽器接口
  • 在web.xml文件中配置監聽器
  • 三、監聽三大作用域創建和銷毀的監聽器

  • ServletContextListener

  • 生命周期 :
  • 創建:在web應用啟動時創建出來 , 之后一直駐留在內存中唯一代表當前web應用 ,
  • 銷毀:直到web應用被移除或 服務器 關閉時隨著web應用銷毀 , ServletConextListener也跟著被銷毀
  • 作用范圍 : 整個web應用內
  • 主要功能 : 在整個web應用作用范圍并且在生命周期中共享數據
  • 案例:

    寫一個類實現監聽器接口 public class MyServletContextListener implements ServletContextListener{public void contextDestroyed(ServletContextEvent sce) {System.out.println("servletContext被銷毀"+sce.getServletContext());}public void contextInitialized(ServletContextEvent sce) {System.out.println("servletContext被創建"+sce.getServletContext());}}在web.xml文件中注冊監聽器 <listener><listener-class>com.tj.listener.MyServletContextListener</listener-class> </listener> 下面兩個監聽方式的開發方式相同
  • HttpSessionListener

  • 生命周期:

  • 創建:第一次調用request.getSession()時創建
  • 銷毀:

  • 自殺 :調用session.invalidate()
  • 超時: 發呆時間超過session存活時間(默認30分鐘)

    擴展: 修改session銷毀時間為1分鐘<session-config><session-timeout>1</session-timeout> </session-config>
  • 意外身亡:服務器非正常關閉

    擴展:session鈍化 、 活化1. 鈍化: 在服務器正常關閉時, 仍然在存活期間的session會被序列化后保存在tomcat的work目錄下2. 活化: 在服務器正常啟動時 , 將仍在存活期間的session讀取到內存中 。繼續使用
  • 作用范圍 : 整個會話
  • 主要功能: 在整個會話范圍內 ,整個會話的生命周期內共享數據
  • ServletRequestListener
  • 生命周期:
  • 創建:請求開始時創建
  • 銷毀:請求結束時銷毀
  • 作用范圍: 一次請求響應
  • 主要功能: 在請求過程中、作用范圍內共享數據
  • 四、 監聽三大作用域中屬性增加和減少的監聽器

  • ServletContextAtrributeListener

  • 案例

    創建一個類 , 并實現對應的接口public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener{public void attributeAdded(HttpSessionBindingEvent se) {System.out.println("session域中添加了屬性"+se.getName()+":"+se.getValue());}public void attributeRemoved(HttpSessionBindingEvent se) {System.out.println("session域中移除了屬性:"+se.getName()+":"+se.getValue());}public void attributeReplaced(HttpSessionBindingEvent se) {System.out.println("session域中有屬性被替換:"+se.getName()+":"+se.getValue()+"值被替換為:"+se.getSession().getAttribute(se.getName()));}} 在web.xml文件中注冊 <listener><listener-class>com.tj.listener.MyHttpSessionAttributeListener</listener-class> </listener> 下面兩個開發方式相同
  • HttpServletSessionAtrributeListener

  • ServletRequestAtrributeListener
  • 五、使JavaBean自己感知自己在session作用域中狀態變化的監聽器

  • HttpSessionBindingListener
  • 使JavaBean自己感知自己在session域中被加入或移除的監聽器
  • HttpSessionActivationListener
  • 使JavaBean自己感知自己在session域被鈍化、活化監聽器
  • 注意:
  • 這兩個監聽器比較特殊 , 不需要單獨創建和在web.xml文件中配置 , 在需要在JavaBean中實現這兩個接口就可以了 。
  • 鈍化實際上是序列化的過程 , 要將JavaBean隨著session鈍化 , 就需要JavaBean實現Serlizeable接口 , 表示這個JavaBean可以被序列化和反序列化 。 JavaBean隨著session的活化而被移入內存中 ,雖然JavaBean內的屬性值一致 ,但早已不是原先的那個JavaBean了 。
  • 案例:

    public class Person implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void valueBound(HttpSessionBindingEvent event) {System.out.println("javabean自己感知到自己被存入session了。。。");}public void valueUnbound(HttpSessionBindingEvent event) {System.out.println("javabean自己感知到自己被移除出session了。。。");}public void sessionWillPassivate(HttpSessionEvent se) {System.out.println("javabean自己感知到自己隨著session被鈍化了。。。");}public void sessionDidActivate(HttpSessionEvent se) {System.out.println("javabean自己感知到自己隨著session被活化了。。。");}}
  • 六、監聽器的應用

  • 開發MyServletContextListener 。 在web應用啟動ServletContext創建時 , 向ServletContext域中添加app屬性 , 值為當前應用的路徑 , 在servletContext銷毀時刪除該屬性 , 這樣以后需要在JSP頁面中寫pageContext.request.getCntextPath{app}就可以了
  • 代碼:

    public class MyServletContextListener implements ServletContextListener{public void contextDestroyed(ServletContextEvent sce) {sce.getServletContext().setAttribute("app", sce.getServletContext().getContextPath());}public void contextInitialized(ServletContextEvent sce) {sce.getServletContext().removeAttribute("app");}}在web.xml文件中注冊監聽器<listener><listener-class>com.tj.listener.MyServletContextListener</listener-class></listener>
  • 總結

    以上是生活随笔為你收集整理的大数据WEB阶段(十六)JavaEE三大 核心技术之监听器Listener的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。