监听实际上指的是对整个Web中需要的位置上的操作进行的一种监听而已,当发生了某些操作之中会自动的执行一些处理功能。那么怎么进行监听呢?
在监听器里面实际上主要都是针对于属性的监听(request、session、application)。
所谓的session监听主要指的是针对与某一个用户进行的监视。
Session监听主要为:
一、 对session的状态监听,HttpSessionListener
它又分为两个操作,分别是:
Session创建:public void sessionCreated(HttpSessionEvent se);
Session销毁:public void sessionDestroyed(HttpSessionEvent se);
这两个方法里面都存在有HttpSessionEvent事件对象,这个类定义有如下方法:
取得当前session对象:public HttpSession getSession();
例:配置一个简单的监听:
package com.lj.zx;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("Session创建+" + arg0.getSession().getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("Session销毁+" + arg0.getSession().getId());
}
}
并在web配置,代码十分简单,如下:
<listener>
<listener-class>com.lj.zx.MyListener</listener-class>
</listener>
将项目部署到tomact中,结果如下:
此时无论如何刷新,结果都是如此。那么如何销毁session呢?销毁Session方法有两种,分别为:
- 明确使用invaildate()方法;
在jsp页面使用invaildate方法,如:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
session.removeAttribute("idid");
%>
对页面进行刷新,结果如下:
2. Session超时时间一到,自动销毁;默认超时时间为30分钟;
在web配置,对session超时时间进行修改:代码如下:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
其默认单位为:“分”
二、 对session的属性监听,HttpSessionAttributeListener;
1.增加session属性:public void attributeAdded(HttpSessionBindingEvent se);
2.替换session属性:public void attributeReplaced(HttpSessionBindingEvent se)
3.删除session属性:public void attributeRemoved(HttpSessionBindingEvent se)
这三个方法都会有一个HttpSessionBindingEvent事件类对象,此类包含如下方法:
① 取得属性的名字:public String getName();
② 取得属性的内容:public Object getValue();
③ 取得session对象:public HttpSession getSession();
例:
package com.lj.zx;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionAttributeListener;
public class MyListener implements HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("增加属性 id =" + arg0.getSession().getId() +", name=" +arg0.getName() +", value=" +arg0.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("删除属性 id =" + arg0.getSession().getId() +", name=" +arg0.getName() +", value=" +arg0.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("替换属性 id =" + arg0.getSession().getId() +", name=" +arg0.getName() +", value=" +arg0.getValue());
}
}
Jsp页面代码为:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
session.setAttribute("idid", "xxx");
%>
结果为:
更改jsp页面代码为:session.removeAttribute("idid");
结果如图: