一 監(jiān)聽器作用
主要是用來監(jiān)聽特定對(duì)象的創(chuàng)建對(duì)象或銷毀,屬性的變化的!是一個(gè)實(shí)現(xiàn)特定接口的普通java類。
Servlet中哪些對(duì)象需要監(jiān)聽?
request/session/servletContext
分別對(duì)應(yīng)的request監(jiān)聽器,session相關(guān)監(jiān)聽器,servletContext監(jiān)聽器
二 監(jiān)聽器(listener)概述
監(jiān)聽器接口
- 監(jiān)聽器對(duì)象創(chuàng)建/銷毀的監(jiān)聽器接口
Interface ServletRequestListener 監(jiān)聽request對(duì)象的創(chuàng)建或銷毀
Interface HttpSessionListener 監(jiān)聽session對(duì)象的創(chuàng)建或銷毀
Interface ServletContextListener 監(jiān)聽servletContext對(duì)象的創(chuàng)建或銷毀 - 監(jiān)聽對(duì)象屬性的變化
Interface ServletRequestAttributeListener 監(jiān)聽request對(duì)象屬性變化: 添加、移除、修改
Interface HttpSessionAttributeListener 監(jiān)聽session對(duì)象屬性變化: 添加、移除、修改
Interface ServletContextAttributeListener 監(jiān)聽servletContext對(duì)象屬性變化 - session相關(guān)監(jiān)聽器
Interface HttpSessionBindingListener 監(jiān)聽對(duì)象綁定到session上的事件
Interface HttpSessionActivationListener(了解) 監(jiān)聽session序列化及反序列化的事件
三 程序?qū)崿F(xiàn)
1 生命周期監(jiān)聽
index.jsp
<%--
Created by IntelliJ IDEA.
User: pc
Date: 2017/9/6
Time: 17:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>路徑問題</title>
</head>
<body>
<h2>歡迎訪問index頁面</h2>
<%
request.setAttribute("name","Yang");
%>
</body>
</html>
RequestListener.java
package entity;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
/**
* Created by pc on 2017/9/12.
*/
public class RequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
Object object = servletRequestEvent.getServletRequest().getAttribute("name");
System.out.println("2.對(duì)象銷毀"+object);
}
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
Object object1 = servletRequestEvent.getServletRequest().getAttribute("name");
System.out.println("1.對(duì)象創(chuàng)建"+object1);
}
}
.xml配置
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>entity.RequestListener</listener-class>
</listener>
</web-app>

測試結(jié)果
2 屬性監(jiān)聽(監(jiān)聽session變化)
index.jsp
<%--
Created by IntelliJ IDEA.
User: pc
Date: 2017/9/6
Time: 17:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>路徑問題</title>
</head>
<body>
<h2>歡迎訪問index頁面</h2>
<%
session.setAttribute("name","YY");
session.removeAttribute("name");
%>
</body>
</html>
SessionAttributeListener.java
package entity;
import javax.servlet.http.*;
/**
* Created by pc on 2017/9/12.
*/
public class SessionAttributeListener implements HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("創(chuàng)建session");
}
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("移除session");
}
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("修改session");
}
}
.xml配置
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>entity.SessionAttributeListener</listener-class>
</listener>
</web-app>

運(yùn)行結(jié)果