中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Listener監聽器生命周期的示例分析

發布時間:2021-08-17 11:15:59 來源:億速云 閱讀:221 作者:小新 欄目:編程語言

小編給大家分享一下基于Listener監聽器生命周期的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一、Listener生命周期

listener是web三大組件之一,是servlet監聽器,用來監聽請求,監聽服務端的操作。

listener分為:(都是接口類,必須實現相應方法)

1.生命周期監聽器(3個)

ServletContextListener 
requestDestroyed 在容器啟動時被調用(在servlet被實例化前執行)
requestInitialized 在容器銷毀時調用(在servlet被銷毀后執行)
HttpSessionListener
sessionCreated 在HttpSession創建后調用
sessionDestroyed 在HttpSession銷毀前調用(執行session.invalidate();方法)
ServletRequestListener
requestDestroyed 在request對象創建后調用(發起請求)
requestInitialized 在request對象銷毀前調用(請求結束)

2.屬性變化監聽器(3個)

attributeAdded(ServletContextAttributeEvent event)向appliction中添加屬性時調用
attributeRemoved(ServletContextAttributeEvent event)從appliction中刪除屬性時調用
attributeReplaced(ServletContextAttributeEvent event)替換application中的屬性時調用
HttpSessionAttributeListener
attributeAdded(HttpSessionBindingEvent event)
attributeRemoved(HttpSessionBindingEvent event)
attributeReplaced(HttpSessionBindingEvent event)
ServletRequestAttributeListener
attributeAdded(ServletRequestAttributeEvent event)
attributeRemoved(ServletRequestAttributeEvent event)
attributeReplaced(ServletRequestAttributeEvent event)

以上監聽器接口除了傳參不同,方法名都是一樣的。分別監聽application,session,request對象的屬性變化。

3.session中指定類屬性變化監聽器(2)

HttpSessionBindingListener 
valueBound(HttpSessionBindingEvent event) 當該類實例設置進session域中時調用
valueUnbound(HttpSessionBindingEvent event) 當該類的實例從session域中移除時調用
HttpSessionActivationListener 
sessionWillPassivate(HttpSessionEvent se) 
sessionDidActivate(HttpSessionEvent se)

二、測試范例

1.生命周期監聽:

ServletContentAttribute_Listener.java

public class ServletContentAttribute_Listener implements ServletContextListener {
 /**
  * ServletContextListener實現方法
  * @param sce
  */
 public void contextInitialized(ServletContextEvent sce) {
  System.out.println("ServletContextListener初始化");
 }

 public void contextDestroyed(ServletContextEvent sce) {
  System.out.println("ServletContextListener銷毀");
 }
}

其他兩個監聽器類似,不在重復貼出。

在web.xml中配置

<!-- 監聽器 -->
 <!-- servlet監聽器 -->
 <listener>
 <listener-class>study.myListener.ServletContentAttribute_Listener</listener-class>
 </listener>

 <!-- session監聽器 -->
 <listener>
 <listener-class>study.myListener.HttpSessionAttribute_Listener</listener-class>
 </listener>
 
 <!-- request監聽器-->
 <listener>
 <listener-class>study.myListener.ServletRequestAttribute_Listener</listener-class>
 </listener>

運行結果:

 基于Listener監聽器生命周期的示例分析

  基于Listener監聽器生命周期的示例分析

2.屬性監聽:

ServletContentAttribute_Listener.java

public class ServletContentAttribute_Listener implements ServletContextAttributeListener{

 /**
  * ServletContextAttributeListener實現方法
  * @param event
  */
 public void attributeAdded(ServletContextAttributeEvent event) {
  String meg = MessageFormat.format("ServletContent添加屬性:{0},屬性值:{1}",event.getName(),event.getValue());
  System.out.println(meg);
 }

 public void attributeRemoved(ServletContextAttributeEvent event) {
  String meg = MessageFormat.format("ServletContent刪除屬性:{0},屬性值:{1}",event.getName(),event.getValue());
  System.out.println(meg);
 }

 public void attributeReplaced(ServletContextAttributeEvent event) {
  String meg = MessageFormat.format("ServletContent替換屬性:{0},屬性值:{1}",event.getName(),event.getValue());
  System.out.println(meg);
 }

}

另外兩個監聽器類似,不在贅訴。接下來用jsp頁面測試

listenerDemo.jsp

<%--
 Created by IntelliJ IDEA.
 User: Administrator
 Date: 2017/10/17
 Time: 15:28
 To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>監聽器設置</title>
</head>
<body>
 <%
  /**
   * servlet監聽
   */
  application.setAttribute("name","changxiang");
  application.setAttribute("name","小Cai先森");
  application.removeAttribute("name");

  /**
   * session監聽
   */
  session.setAttribute("sessionName","changxiang");
  session.setAttribute("sessionName","小Cai先森");
  session.removeAttribute("sessionName");
  session.invalidate();
  /**
   * request監聽
   */
  request.setAttribute("requestName","changxiang");
  request.setAttribute("requestName","小Cai先森");
  request.removeAttribute("requestName");
 %>
</body>
</html>

執行結果如下:

 基于Listener監聽器生命周期的示例分析

注意:其中遇到一個問題:就是在啟動tomcat的時候servletcontextListener監聽執行了兩次,最后刪除掉server.xml中 Context 的手動配置,這樣就不會加載兩次了。

看完了這篇文章,相信你對“基于Listener監聽器生命周期的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

古蔺县| 永吉县| 北票市| 祥云县| 左权县| 富源县| 峨眉山市| 德钦县| 卫辉市| 济阳县| 静乐县| 托克逊县| 大荔县| 海丰县| 邯郸市| 扎囊县| 太湖县| 漾濞| 分宜县| 吉木乃县| 孟津县| 沙湾县| 大城县| 登封市| 封开县| 西青区| 太仓市| 星子县| 内乡县| 英德市| 象州县| 安乡县| 闽清县| 安泽县| 高雄县| 错那县| 石屏县| 阳江市| 平潭县| 盐山县| 陆丰市|