通过实现HttpSessionListener,HttpSessionAttributeListener接口可以对Session的新建,修改,删除进行监听。
HttpSessionListener 接口有两个方法:
sessionCreated //新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发
sessionDestroyed //销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁
HttpSessionAttributeListener有三个方法:
attributeAdded //向session添加值时调用
attributeRemoved //删除session中的值时调用
attributeReplaced //更新session中的值时调有
简单实例:
1. 新建监听类 HttpSessionListenerTest
package com.demo;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class HttpSessionListenerTest implements HttpSessionListener,HttpSessionAttributeListener {
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("创建Session");
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("销毁Session");
}
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("添加");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("删除");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("更新");
}
}
2.新建servlet ServletSessionTest
package com.demo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.Session;
/**
* Servlet implementation class ServletSessionTest
*/
public class ServletSessionTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletSessionTest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String str = request.getParameter("id");
if(str.equals("1")){
request.getSession().setAttribute("aa", "sssss");
}else if(str.equals("2")){
request.getSession().setAttribute("bbb", "bbb");
}else if(str.equals("3")){
request.getSession().removeAttribute("bbb");
}else if(str.equals("4")){
request.getSession().invalidate();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>demo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.demo.HttpSessionListenerTest</listener-class>
</listener>
<servlet>
<description></description>
<display-name>ServletSessionTest</display-name>
<servlet-name>ServletSessionTest</servlet-name>
<servlet-class>com.demo.ServletSessionTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletSessionTest</servlet-name>
<url-pattern>/ServletSessionTest</url-pattern>
</servlet-mapping>
</web-app>
3.启动tomcat发布服务
4.浏览器中访问 http://localhost:8080/demo/ServletSessionTest?id=1 ecplise控制台中打印:“创建Session 添加”
如果第二次访问 http://localhost:8080/demo/ServletSessionTest?id=1 ecplise控制台中打印:“ 更新”
第一次访问 http://localhost:8080/demo/ServletSessionTest?id=2 ecplise控制台中打印:“ 添加”
第一次访问 http://localhost:8080/demo/ServletSessionTest?id=3 ecplise控制台中打印:“ 删除”
第一次访问 http://localhost:8080/demo/ServletSessionTest?id=4 ecplise控制台中打印:“ 销毁Session 删除”