目录
监听器的作用:
监听器的类别:
监听器分类:
动手项目:添加监听器,每次有用户进行访问时,在本地硬盘添加记录:
监听器的作用:
在某个事件触发的时候,激活监听器,执行预定的操作
监听器的类别:
在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请求,硬盘里便能够写下一条记录。