目錄
監聽器的作用:
監聽器的類别:
監聽器分類:
動手項目:添加監聽器,每次有使用者進行通路時,在本地硬碟添加記錄:
監聽器的作用:
在某個事件觸發的時候,激活監聽器,執行預定的操作
監聽器的類别:
在Servlet規範中定義了多種類型的監聽器,它們用于監聽的事件源分别為SerlvetConext,HttpSession和ServletRequest這三個域對象。
監聽器分類:
監聽器的分類 監聽域對象本身的建立與銷毀(3個)
ServletRequestListener
HttpSessionListener
ServletContextListener 均有兩個方法(建立和删除)
監聽域對象中屬性的增、删、改的監聽器(3個)
ServletContextAttributeListener,
HttpSessionAttributeListener,
ServletRequestAttributeListener 均有3個方法(增、删、改) 以上兩類監聽器必須在web.xml中注冊才可以
監聽器的分類 感覺型監聽器(2個):
監聽自己何時被綁到session,何時解綁;何時被鈍化,何時被活化
HttpSessionBindingListener 實作該接口的類能檢測自己何時被綁定和解綁
HttpSessionActivationListener 實作該接口的類能監測自己何時随着HttpSession一起活化和鈍化。
鈍化:序列化到硬碟上
活化:反序列化到記憶體中 該類監聽器不需要再web.xml中注冊,但是需要相應的類實作對應接口
動手項目:添加監聽器,每次有使用者進行通路時,在本地硬碟添加記錄:
首先修改xml中的檔案:
<listener>
<listener-class>com.bjsxt.listener.LoginListener</listener-class>
</listener>
在com.bjsxt的包下建立LoginListener,因為每次通路都要發送一個Request請求,是以我們選擇request監聽器:
package com.bjsxt.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import static java.io.FileDescriptor.out;
//實作ServletRequestListener接口
public class LoginListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
HttpServletRequest request=
(HttpServletRequest)servletRequestEvent.getServletRequest();
String add=request.getRemoteAddr();
String url=request.getRequestURL().toString();
String name=request.getServerName();
String message="add: "+add+" url: "+url+" name: "+name;
PrintWriter printWriter= null;
try {
printWriter = new PrintWriter(new FileWriter("G://message.log",true));
} catch (IOException e) {
e.printStackTrace();
}
printWriter.write(message);
printWriter.close();
}
}
每次有使用者對頁面進行通路,發起request請求,硬碟裡便能夠寫下一條記錄。