小編給大家分享一下基于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>
運行結果:


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>執行結果如下:

注意:其中遇到一個問題:就是在啟動tomcat的時候servletcontextListener監聽執行了兩次,最后刪除掉server.xml中 Context 的手動配置,這樣就不會加載兩次了。
看完了這篇文章,相信你對“基于Listener監聽器生命周期的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。