IT兄弟連 JavaWeb教程 監聽器2
- 2019 年 10 月 5 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/ITXDL123/article/details/90746099
4 監聽HttpSession域對象的創建和銷毀
HttpSessionListener介面用於監聽HttpSession對象的創建和銷毀。
創建一個Session時,激發sessionCreate(HttpSessionEvent event)方法。
銷毀一個Session時,激發sessionDestroyed(HttpSessionEvent event)方法。
範例:編寫一個MyHttpSessionListener類,實現HttpSessionListener介面,監聽HttpSession對象的創建和銷毀。
● 編寫監聽器,程式碼如下:
package com.xdl.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* MyHttpSessionListener類實現了HttpSessionListener介面
* 因此可以對HttpSession對象的創建和銷毀這兩個動作進行監聽
*/
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println(event.getSession() + "創建了");
System.out.println("session id是:" + event.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("session銷毀了");
}
}
● 在web.xml文件中註冊監聽器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<listener>
<description>HttpSessionListener監聽器</description>
<listener-class>com.xdl.listener.MyHttpSessionListener</listener-class>
</listener>
<!– 配置HttpSession對象的銷毀時機 –>
<session-config>
<!– 配置HttpSession對象1分鐘之後銷毀 –>
<session-timeout>1</session-timeout>
</session-config>
</web-app>
當我們訪問JSP頁面時,HttpSession對象就會創建,此時就可以在HttpSessionListener觀察到HttpSession對象的創建過程了,我們可以寫一個JSP頁面觀察HttpSession對象創建的過程。
● 編寫index.jsp,詳細程式碼如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>兄弟連IT教育</title>
</head>
<body>
<h1>HttpSessionListener監聽器監聽HttpSession對象的創建</h1>
訪問JSP頁面時,HttpSession就創建了,創建好的Session的id是:${pageContext. session.id }
</body>
</html>
啟動Tomcat伺服器,使用瀏覽器訪問localhsot:8080/XDL/index.jsp,控制台中將顯示如圖7所示的資訊。

圖7 控制台列印了創建Session的資訊
在瀏覽器中,將顯示如圖8所示的頁面。

圖8 瀏覽器中顯示的頁面
等待一分鐘後,可以在Eclipse的控制台中發現session銷毀也被監聽到了。如圖9所示。

圖9 控制台中列印了Session被銷毀的資訊
監聽ServletRequest域對象的創建和銷毀
ServletRequestListener介面用於監聽ServletRequest對象的創建和銷毀。
Request對象被創建時,監聽器的requestInitialized(ServletRequestEvent event)方法將會被調用。
Request對象被銷毀時,監聽器的requestDestroyed(ServletRequestEvent event)方法將會被調用。
ServletRequest域對象創建和銷毀時機:
創建:用戶每一次訪問都會創建request對象。
銷毀:當前訪問結束,request對象就會銷毀。
範例:編寫一個MyServletRequestListener類,實現ServletRequestListener介面,監聽ServletRequest對象的創建和銷毀。
● 編寫監聽器,程式碼如下:
package com.xdl.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
/**
* MyServletRequestListener類實現了ServletRequestListener介面
* 因此可以對ServletRequest對象的創建和銷毀這兩個動作進行監聽
*/
public class MyServletRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent event) {
System.out.println(event.getServletRequest() + "銷毀了");
}
@Override
public void requestInitialized(ServletRequestEvent event) {
System.out.println(event.getServletRequest() + "創建了");
}
}
● 在web.xml文件中註冊監聽器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<listener>
<description>ServletRequestListener監聽器</description>
<listener-class>com.xdl.listener.MyServletRequestListener</listener-class>
</listener>
</web-app>
打開Tomcat伺服器,當第一次訪問index.jsp文件時,Eclipse控制台輸出如圖10所示的資訊。

10 控制台輸出了request創建和銷毀的資訊
點擊瀏覽器的刷新按鈕,再次訪問index.jsp文件時,Eclipse控制台輸出如圖11所示的資訊。

圖11 控制台再次輸出了request創建和銷毀的資訊
從運行結果可以看到,用戶每一次訪問都會創建request對象,當次訪問結束後,request對象就會銷毀。