天天看点

监听器(Listener)

目录

监听器的作用:

监听器的类别:

监听器分类:

动手项目:添加监听器,每次有用户进行访问时,在本地硬盘添加记录:

监听器的作用:

  在某个事件触发的时候,激活监听器,执行预定的操作

监听器的类别:

在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请求,硬盘里便能够写下一条记录。

继续阅读