4 監聽HttpSession域對象的建立和銷燬html
HttpSessionListener接口用於監聽HttpSession對象的建立和銷燬。java
建立一個Session時,激發sessionCreate(HttpSessionEvent event)方法。web
銷燬一個Session時,激發sessionDestroyed(HttpSessionEvent event)方法。瀏覽器
範例:編寫一個MyHttpSessionListener類,實現HttpSessionListener接口,監聽HttpSession對象的建立和銷燬。服務器
● 編寫監聽器,代碼以下:session
package com.xdl.listener;app
import javax.servlet.http.HttpSessionEvent;jsp
import javax.servlet.http.HttpSessionListener;ide
/**3d
* 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對象就會銷燬。