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對象就會銷毀。