ServletRequestListener与ServletRequestAttributeListener监听器的应用



ServletRequestListener与ServletRequestAttributeListener监听器的应用实例源码,

ServletRequestListener用于监听用户请求的到达,实现该接口的监听器需要实现如下两个方法。

requestInitialized(ServletRequestEvent sre):用户请求到底、被初始化时触发该方法。

requestDestroyed(ServletRequestEvent sre):用户请求结束、被销毁时触发该方法。
ServletRequestAttributeListener则用于监听ServletRequest(request)范围内属性的变化,实现该接口的监听器需要实现attributeAdded、attributeRemoved、attributeReplaced三个方法。由此可见,ServletRequestAttributeListener与ServletContextAttributeListener的作用相似,都用于监听属性的改变,只是ServletRequestAttributeListener监听request范围内属性的改变,ServletContextAttributeListener监听的是application范围内属性的改变。应用程序完全可以采用一个监听器类来监听多种事件,只要让该监听器实现类同时实现多个监听器接口即可。

request_listener.jsp源码文件:

<%@ page language=”java” import=”java.util.*” pageEncoding=”utf-8″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>My JSP ‘request_listener.jsp’ starting page</title>
</head>
<body>
<%
request.setAttribute(“user”,”xyz”);
request.setAttribute(“user”,”qq”);
request.setAttribute(“user”,”aa”);
request.removeAttribute(“user”);
%>
</body>
</html>

Request_Listener.java文件源码:

package com.cn.listener;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;


public class Request_Listener implements
ServletRequestListener,ServletRequestAttributeListener{

public void requestDestroyed(ServletRequestEvent arg0) {
// TODO 对销毁客户端请求进行监听
writer(“销毁客户端请求”);
}

public void requestInitialized(ServletRequestEvent arg0) {
// TODO 对初始化客户端请求进行监听
writer(“初始化客户端请求”);
ServletRequest request = arg0.getServletRequest();//初始化客户端请求
writer(request.getRemoteAddr());
}

public void attributeAdded(ServletRequestAttributeEvent arg0) {
// TODO 监听属性的添加
writer(“attributeAdded(“+arg0.getName()+”,”+arg0.getValue()+”)”);

}

public void attributeRemoved(ServletRequestAttributeEvent arg0) {
// TODO 监听属性的删除
writer(“attributeRemoved(“+arg0.getName()+”,”+arg0.getValue()+”)”);
}

public void attributeReplaced(ServletRequestAttributeEvent arg0) {
// TODO 监听属性的更新
writer(“attributeReplaced(“+arg0.getName()+”,”+arg0.getValue()+”)”);
}
public void writer(String message){
PrintWriter printWriter = null;
try {
printWriter = new PrintWriter(new FileOutputStream(“D:\\request.txt”,true));
printWriter.println(new java.util.Date().toLocaleString()+” Session_Listener: “+message);
printWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

}

web.xml文件源码:

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.5″
xmlns=”http://java.sun.com/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”>
<listener>
<listener-class>com.cn.listener.Request_Listener</listener-class>
</listener>
</web-app>