httpsessionbindingevent抽象类有什么作用用

web.xml中listener的作用及使用(转)
一.WebContextLoaderListener 监听类
它能捕捉到服务器的启动和停止,在启动和停止触发里面的方法做相应的操作!
它必须在web.xml 中配置才能使用,是配置监听类的
二.下面是搜集的一些listener方面的知识
监听用户上线与退出,显示在线用户
1、登陆页面 Login.jsp
&%@page pageEncoding="gb2312"
contentType="text/ charset=gb2312" %&
session=request.getSession(false);
if(session!=null)session.invalidate();
&head&&title&&/title&&/head&
&form action="isOnline.jsp"
method="post"&
用户名:&input type="text"
name="uName"/&
&input type="submit"
value="上线"&
2、控制页面(只是为了说明监听器问题,所以简单了点...) isOnline.jsp
&%@page pageEncoding="gb2312"
contentType="text/ charset=gb2312" %&
&head&&title&&/title&&/head&
session=request.getSession();
session.setAttribute("userName",request.getParameter("uName"));
response.sendRedirect("showOnline.jsp");
3、显示页面 showOnline.jsp
&%@page pageEncoding="gb2312"
contentType="text/ charset=gb2312"
import="java.util.ArrayList" %&
&head&&title&&/title&&/head&
showList=(ArrayList)(getServletContext().getAttribute("list"));
out.print("在线人数
"+showList.size()+"&br&");
for(int i=0;i&showList.size();i++){
out.print(showList.get(i)+"在线"+"&br&");
href="Login.jsp"&退出&/a&
4、配置页面 web.xml
&?xml version="1.0"
encoding="gb2312"?&
&!DOCTYPE web-app
&&& PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application
"/dtd/web-app_2_3.dtd"&
&listener&
&listener-class&org.xiosu.listener.onlineListener&/listener-class&
&/listener&
&/web-app&
5、监听器 onlineListener.java
package org.xiosu.
import java.util.ArrayL
import javax.servlet.ServletC
import javax.servlet.http.HttpSessionAttributeList
import javax.servlet.http.HttpSessionBindingE
import javax.servlet.http.HttpSessionE
import javax.servlet.http.HttpSessionL
public class onlineListener implements HttpSessionListener,
HttpSessionAttributeListener {
ArrayList list = new ArrayList();
// 新建一个session时触发此操作
public void sessionCreated(HttpSessionEvent se) {
sc=se.getSession().getServletContext();
System.out.println("新建一个session");
// 销毁一个session时触发此操作
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("销毁一个session");
if (!list.isEmpty()) {
&& list.remove((String)
se.getSession().getAttribute("userName"));
&& sc.setAttribute("list",
// 在session中添加对象时触发此操作,在list中添加一个对象
public void attributeAdded(HttpSessionBindingEvent sbe) {
list.add((String) sbe.getValue());
sc.setAttribute("list", list);
// 修改、删除session中添加对象时触发此操作
public void attributeRemoved(HttpSessionBindingEvent arg0) {
public void attributeReplaced(HttpSessionBindingEvent arg0) {
说明:本例只为简单介绍监听器,并未进行安全方面设置。
监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用
户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent&&
se)方法,这样
就可以给在线人数加1。常用的监听接口有以下几个:
ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。
ServletContextListener监听ServletContext。当创建ServletContext时,激发
contextInitialized(ServletContextEvent&&
sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent&&
sce)方法。
HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session&&
Created(HttpSessionEvent&&
se)方法;当销毁一个Session时,激发sessionDestroyed&&
(HttpSessionEvent&& se)方法。
HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发
attributeAdded(HttpSessionBindingEvent&&
方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent&&
se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent&&
se)&& 方法。
example:随服务器启动
<web-app>
com.tb.listener.CountStartListener
package com.tb.
import javax.servlet.ServletContextE
import javax.servlet.ServletContextL
import javax.servlet.http.HttpS
import com.tb.timertask.DoCountT
public class CountStartListener extends HttpServlet implements
ServletContextListener
private static final long serialVersionUID =
public CountStartListener()
&& // TODO Auto-generated
constructor stub
public void contextDestroyed(ServletContextEvent arg0)
&& // TODO Auto-generated method
&& public void
contextInitialized(ServletContextEvent arg0)
&& DoCountTask.dotask();
Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。
目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中HttpSessionAttributeListener与
HttpSessionBindingListener
皆使用HttpSessionBindingEHttpSessionListener和
HttpSessionActivationListener则都使用HttpSessionE其余Listener对应的Event如下所
Listener接口
ServletContextListener
ServletContextEvent
ServletContextAttributeListener
ServletContextAttributeEvent
HttpSessionListener
HttpSessionEvent
HttpSessionActivationListener
HttpSessionAttributeListener
HttpSessionBindingEvent
HttpSessionBindingListener
ServletRequestListener
ServletRequestEvent
ServletRequestAttributeListener
ServletRequestAttributeEvent
分别介绍:
一 ServletContext相关监听接口
补充知识:
通过ServletContext
的实例可以存取应用程序的全局对象以及初始化阶段的变量。
在JSP文件中,application 是 ServletContext
的实例,由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext
全局对象即Application范围对象,初始化阶段的变量指在web.xml中,经由&context-param&元素所设定的变量,它的范围也是Application范围,例如:
&context-param&
&param-name&Name&/param-name&
&param-value&browser&/param-value&
&/context-param&
当容器启动时,会建立一个Application范围的对象,若要在JSP网页中取得此变量时:
String name =
(String)application.getInitParameter("Name");
或者使用EL时:
${initPara.name}
若是在Servlet中,取得Name的值方法:
String name =
(String)ServletContext.getInitParameter("Name");
1.ServletContextListener:
用于监听WEB
应用启动和销毁的事件,监听器类需要实现javax.servlet.ServletContextListener 接口。
ServletContextListener 是 ServletContext
的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时
ServletContext 将要被销毁。
ServletContextListener接口的方法:
contextInitialized(ServletContextEvent sce)
通知正在接受的对象,应用程序已经被加载及初始化。
contextDestroyed(ServletContextEvent sce)
通知正在接受的对象,应用程序已经被载出。
ServletContextEvent中的方法:
ServletContext getServletContext()
取得ServletContext对象
2.ServletContextAttributeListener:用于监听WEB应用属性改变的事件,包括:增加属性、删除属性、修改属性,监听器类需要实现javax.servlet.ServletContextAttributeListener接口。
ServletContextAttributeListener接口方法:
attributeAdded(ServletContextAttributeEvent scab)
若有对象加入Application的范围,通知正在收听的对象
attributeRemoved(ServletContextAttributeEvent scab)
若有对象从Application的范围移除,通知正在收听的对象
attributeReplaced(ServletContextAttributeEvent scab)
若在Application的范围中,有对象取代另一个对象时,通知正在收听的对象
ServletContextAttributeEvent中的方法:
java.lang.String getName()
回传属性的名称
java.lang.Object getValue()
回传属性的值
二、HttpSession相关监听接口
1.HttpSessionBindingListener接口
注意:HttpSessionBindingListener接口是唯一不需要再web.xml中设定的Listener
当我们的类实现了HttpSessionBindingListener接口后,只要对象加入 Session范围
(即调用HttpSession对象的setAttribute方法的时候)或从Session范围中移出(即调用HttpSession对象的
removeAttribute方法的时候或Session Time out的时候)时,容器分别会自动调用下列两个方法:
void valueBound(HttpSessionBindingEvent
valueUnbound(HttpSessionBindingEvent event)
思考:如何实现记录网站的客户登录日志, 统计在线人数?
2.HttpSessionAttributeListener接口
HttpSessionAttributeListener监听HttpSession中的属性的操作。
在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se)
方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent
se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent
se) 方法。这和ServletContextAttributeListener比较类似。
3.HttpSessionListener接口
HttpSessionListener监听
HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent
se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。
4.HttpSessionActivationListener接口
主要用于同一个Session转移至不同的JVM的情形。
四、ServletRequest监听接口
1.ServletRequestListener接口
和ServletContextListener接口类似的,这里由ServletContext改为ServletRequest
2.ServletRequestAttributeListener接口
和ServletContextListener接口类似的,这里由ServletContext改为ServletRequest
有的listener可用于统计网站在线人数及访问量。 如下:
服务器启动时(实现ServletContextListener监听器contextInitialized方法),读取数据库,并将其用一个计数变量保存在application范围内
session创建时(实现HttpSessionListener监听器sessionCreated方法),读取计数变量加1并重新保存
服务器关闭时(实现ServletContextListener监听器contextDestroyed方法),更新数据库
http://www.blogjava.net/wx886104/archive//322419.html
http://hht83./blog/static//
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。系统登录、登出保存日志问题 - ITeye问答
最近有个需求,系统登录进来保存用户 登录日志的信息,有做过的请指教一下。。
问题补充:liuqing_2010_07 写道这个就是设计一个数据库表在用户登录时把它的登录时间,ip地址,用户名等等记录到数据库中。用户登录成功后将用户的登录信息写到数据库中。做的高级点的erp软件还能把用户做了哪些操作记录下来。
大致思路:
1.根据日志设计数据库表
2.登录成功,把登录信息写到表中。
3.用户推出或者注销把用户的注销,退出信息写到表中。
如果想做一个单点登录系统,登录时检测用户是否是活跃状态,是的不让登录,那这个就是单点登录了(SSO)
关于SSO可以参考参考:
url:/luiweiping002/archive//1649266.html
现在我们项目中的日志实体类有这么几个属性:操作名称、操作人、操作状态、退出状态、操作时间、退出时间,当用户登录时,就新增一条信息,记录登录人,登录时间,状态,退出时就将新增的那条记录。请问这样行的通吗?帮忙指点一下。谢谢。补充一下,系统没有单点登录,也没有用spring的aop,就是简单的记录用户登录、登出信息。
问题补充:housen1987 写道  当用户登录系统时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。
  我们利用HttpSessionBindingListener接口来完成记录登录和退出日志的功能,该接口中定义了两个方法:
  ·valueBound(HttpSessionBindingEvent event)
  ·valueUnbound(HttpSessionBindingEvent event)
  如果一个类实现了HttpSessionBindingListener接口,当对象通过session.setAttribute()被绑定到Session中时,则对象的接口方法valueBound()被自动调用,当对象从session中移出时(通过调用session.invalidate()、session.removeAttribute()或session自动过期时),valueUnbound()方法将被自动调用。
  下面我们使User.java类实现HttpSessionBindingListener接口,调整后的代码如下所示:
import javax.servlet.http.HttpSessionBindingL
import javax.servlet.http.HttpSessionBindingE
import java.sql.*;
import java.text.SimpleDate表单
import java.util.D
public class User implements HttpSessionBindingListener
 private String loginD//用户登录时间
 public void valueBound(HttpSessionBindingEvent event)
  Connection conn =
  String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " +
      " values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )";
   conn = DBConnection.getConnection();
   PreparedStatement pStat = conn.prepareStatement(sqlStr);
   loginDatetime = getCurrDatetimeStr(); //当前时间串
   pStat.setString(1, userId);
   pStat.setString(2, loginDatetime);
   pStat.executeUpdate();
  } catch (SQLException e)
   throw new RuntimeException(
    "用户登陆日志写入出错");
  } finally
  if (conn != null)
   conn.close();
 } catch (SQLException ex)
  ex.printStackTrace();
public void valueUnbound(HttpSessionBindingEvent event)
 Connection conn =
 String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " +
     " where USER_ID=? and DT_LOGIN = ?";
  conn = DBConnection.getConnection();
  PreparedStatement pStat = conn.prepareStatement(sqlStr);
  pStat.setString(1, getCurrDatetimeStr());
  pStat.setString(2, userId);
  pStat.setString(3, loginDatetime);
  pStat.executeUpdate();
 } catch (SQLException e)
  throw new RuntimeException(
   "用户退出日志写入出错");
 } finally
   if (conn != null)
    conn.close();
  } catch (SQLException ex)
   ex.printStackTrace();
//获取当前时间字串,以yyyyMMddHHmmss格式返回,如01
private static String getCurrDatetimeStr()
 SimpleDate表单at sdf = new SimpleDate表单at("yyyyMMddHHmmss");
 return sdf.表单at(new Date());
  valueBound()方法向T_LOGIN_LOG表插入一条登录日志,在valueUnbound()方法中更新日志表的退出时间,此外第80~84行提供了一个获取当前时间串的方法getCurrDatetimeStr(),通过该方法获取登录和退出时间点的时间字符串。
  下面通过描述用户登录系统直到退出时所经历的步骤说明程序如何记录用户的登录和退出时间的:
  1.用户通过login.jsp输入密码登录后,程序转向switch.jsp控制页面。
  2.在switch.jsp中,我们通过session.setAttribute("ses_userBean", userBean)方法将User.java类的对象userBean绑定到session中。
  3.此时userBean对象的HttpSessionBindingListener接口方法valueBound()被调用,向T_LOGIN_LOG表插入一条登录日志。
  4.switch.jsp转向welcome.jsp页面。
  5.用户点击welcome.jsp页面中的链接退出系统时,转向quit.jsp页面。
  6.quit.jsp调用session.invalidate()方法,userBean对象从session中清除。
  7.此时userBean对象的HttpSessionBindingListener接口方法valueUnbound()方法被调用,更新日志的退出时间,关闭浏览器窗口。
  HttpSessionBindingListener接口是Web容器的事件接口,实现接口的类在某个事件发生时自动被调用,Web容器有多个这样的事件接口,它们分别是:
  ·ServletContextListener 接口:Web容器启动和销毁的事件处理接口,接口中定义了两个方法。
  ·ServletContextAttributeListener接口:Web上下文属性发生更改时的事件处理接口。
  ·HttpSessionListener接口:Session创建和销毁事件的事件处理接口。
  ·HttpSessionAttributeListener接口:Session会话中属性对象更改的事件处理接口,该接口和我们在前面使用的HttpSessionBindingListener接口相似。
  此外在J2EE1.4中还提供了另外两个事件处理接口,它们是:
  ·ServletRequestListener接口:Request请求对象创建和销毁事件处理接口。
  ·ServletRequestAttributeListener接口:更改Request中属性对象时的事件处理接口。
如果用 HttpSessionBindingListener 实现的话,那我的user类必须实现这个接口???我们项目现在采用的是struts2 sping hibernate,如果我的user类实现HttpSessionBindingListener 接口,就得在user类中重写那两个方法,而且得用jdbc 保存的日志表中?我想在action这一层 中加入日志,如何实现?
问题补充:housen1987 写道引用如果用 HttpSessionBindingListener 实现的话,那我的user类必须实现这个接口???我们项目现在采用的是struts2 sping hibernate,如果我的user类实现HttpSessionBindingListener 接口,就得在user类中重写那两个方法,而且得用jdbc 保存的日志表中?我想在action这一层 中加入日志,如何实现?
最主要的还是session销毁时(可能有N中情况诱发,如正常退出、关闭浏览器等),如何触发写日志的操作。
登陆时,日志可以随着用户名/密码的验证通过而写入。
退出时,如何利用session销毁事件写日志,这是一个难点,不实现HttpSessionBindingListener接口的话,就不好触发session销毁,如果自己写代码判断的话,可以在后台开一个扫描器,每个很短的一段时间判断一下session的状态,这样写起来麻烦,而且写不好的话,也耗费容器性能。
建议实现一下这个接口,反正接口是可以实现多个的。
现在要这样实现了,登录进来记录用户信息,当用户退出时 就修改记录的用户信息,我感觉这不大合理呀。要修改,我根据什么修改呀。
问题补充:liuqing_2010_07 写道这个问题我觉得嘛,重要的不是 代码 重要的是思路。登录时 你要记录什么信息,你需要设计成什么样的表结构,那些信息是你关注的很重要。这些弄清了。好的系统是设计出来的,编码只是其中的一个重要的环节。很多人只注重,有现成的代码吗?很多答题人又很有意思,其实自己也没有那些经验 上网随便搜一个 粘切上 这样不好。没有帮助!
三点很重要:
1.我需要实现那些需求,功能是什么,我关注那些信息
2.我想把它设计成什么样的比较合理,设计。
3.先实现一下,看看行不行,不行在改进。敏捷开发。
在实现过程中遇到了某些技术小问题,再各个击破。不就OK了吗!
感谢您的帮助。。
采纳的答案
引用现在要这样实现了,登录进来记录用户信息,当用户退出时 就修改记录的用户信息,我感觉这不大合理呀。要修改,我根据什么修改呀。
只是说记录用户的登陆状态,没必要修改用户信息啊,你再重建一张用户状态表,每个用户一个状态,用户登陆退出的时候,只修改对应的状态信息,只不过多加了一个update操作而已。
引用如果用 HttpSessionBindingListener 实现的话,那我的user类必须实现这个接口???我们项目现在采用的是struts2 sping hibernate,如果我的user类实现HttpSessionBindingListener 接口,就得在user类中重写那两个方法,而且得用jdbc 保存的日志表中?我想在action这一层 中加入日志,如何实现?
最主要的还是session销毁时(可能有N中情况诱发,如正常退出、关闭浏览器等),如何触发写日志的操作。
登陆时,日志可以随着用户名/密码的验证通过而写入。
退出时,如何利用session销毁事件写日志,这是一个难点,不实现HttpSessionBindingListener接口的话,就不好触发session销毁,如果自己写代码判断的话,可以在后台开一个扫描器,每个很短的一段时间判断一下session的状态,这样写起来麻烦,而且写不好的话,也耗费容器性能。
建议实现一下这个接口,反正接口是可以实现多个的。
现在我们项目中的日志实体类有这么几个属性:操作名称、操作人、操作状态、退出状态、操作时间、退出时间,当用户登录时,就新增一条信息,记录登录人,登录时间,状态,退出时就将新增的那条记录。请问这样行的通吗?帮忙指点一下。谢谢。补充一下,系统没有单点登录,也没有用spring的aop,就是简单的记录用户登录、登出信息。
才看到了你的回复 不好意思。
没有单点登录你这个就比较简单。你的字段中需要记录一下登录IP这样把用户登录IP记录下来比较好。其他基本信息都有了。做起来还是比较简单。仔细考虑一下你的实际情况。把表结构设计合理后。再去设计记录信息的接口和方法。
这个问题我觉得嘛,重要的不是 代码 重要的是思路。登录时 你要记录什么信息,你需要设计成什么样的表结构,那些信息是你关注的很重要。这些弄清了。好的系统是设计出来的,编码只是其中的一个重要的环节。很多人只注重,有现成的代码吗?很多答题人又很有意思,其实自己也没有那些经验 上网随便搜一个 粘切上 这样不好。没有帮助!
三点很重要:
1.我需要实现那些需求,功能是什么,我关注那些信息
2.我想把它设计成什么样的比较合理,设计。
3.先实现一下,看看行不行,不行在改进。敏捷开发。
在实现过程中遇到了某些技术小问题,再各个击破。不就OK了吗!
  当用户登录系统时,在日志表中插入一条记录,记录用户登录的时间,在用户退出系统时记录用户退出系统的时间。
  我们利用HttpSessionBindingListener接口来完成记录登录和退出日志的功能,该接口中定义了两个方法:
  ·valueBound(HttpSessionBindingEvent event)
  ·valueUnbound(HttpSessionBindingEvent event)
  如果一个类实现了HttpSessionBindingListener接口,当对象通过session.setAttribute()被绑定到Session中时,则对象的接口方法valueBound()被自动调用,当对象从session中移出时(通过调用session.invalidate()、session.removeAttribute()或session自动过期时),valueUnbound()方法将被自动调用。
  下面我们使User.java类实现HttpSessionBindingListener接口,调整后的代码如下所示:
import javax.servlet.http.HttpSessionBindingL
import javax.servlet.http.HttpSessionBindingE
import java.sql.*;
import java.text.SimpleDate表单
import java.util.D
public class User implements HttpSessionBindingListener
 private String loginD//用户登录时间
 public void valueBound(HttpSessionBindingEvent event)
  Connection conn =
  String sqlStr = "insert into T_LOGIN_LOG(ID, USER_ID, DT_LOGIN) " +
      " values(SEQ_LOGIN_LOG_ID.NEXTVAL,?,? )";
   conn = DBConnection.getConnection();
   PreparedStatement pStat = conn.prepareStatement(sqlStr);
   loginDatetime = getCurrDatetimeStr(); //当前时间串
   pStat.setString(1, userId);
   pStat.setString(2, loginDatetime);
   pStat.executeUpdate();
  } catch (SQLException e)
   throw new RuntimeException(
    "用户登陆日志写入出错");
  } finally
  if (conn != null)
   conn.close();
 } catch (SQLException ex)
  ex.printStackTrace();
public void valueUnbound(HttpSessionBindingEvent event)
 Connection conn =
 String sqlStr = " update T_LOGIN_LOG set DT_LONOUT = ? " +
     " where USER_ID=? and DT_LOGIN = ?";
  conn = DBConnection.getConnection();
  PreparedStatement pStat = conn.prepareStatement(sqlStr);
  pStat.setString(1, getCurrDatetimeStr());
  pStat.setString(2, userId);
  pStat.setString(3, loginDatetime);
  pStat.executeUpdate();
 } catch (SQLException e)
  throw new RuntimeException(
   "用户退出日志写入出错");
 } finally
   if (conn != null)
    conn.close();
  } catch (SQLException ex)
   ex.printStackTrace();
//获取当前时间字串,以yyyyMMddHHmmss格式返回,如01
private static String getCurrDatetimeStr()
 SimpleDate表单at sdf = new SimpleDate表单at("yyyyMMddHHmmss");
 return sdf.表单at(new Date());
  valueBound()方法向T_LOGIN_LOG表插入一条登录日志,在valueUnbound()方法中更新日志表的退出时间,此外第80~84行提供了一个获取当前时间串的方法getCurrDatetimeStr(),通过该方法获取登录和退出时间点的时间字符串。
  下面通过描述用户登录系统直到退出时所经历的步骤说明程序如何记录用户的登录和退出时间的:
  1.用户通过login.jsp输入密码登录后,程序转向switch.jsp控制页面。
  2.在switch.jsp中,我们通过session.setAttribute("ses_userBean", userBean)方法将User.java类的对象userBean绑定到session中。
  3.此时userBean对象的HttpSessionBindingListener接口方法valueBound()被调用,向T_LOGIN_LOG表插入一条登录日志。
  4.switch.jsp转向welcome.jsp页面。
  5.用户点击welcome.jsp页面中的链接退出系统时,转向quit.jsp页面。
  6.quit.jsp调用session.invalidate()方法,userBean对象从session中清除。
  7.此时userBean对象的HttpSessionBindingListener接口方法valueUnbound()方法被调用,更新日志的退出时间,关闭浏览器窗口。
  HttpSessionBindingListener接口是Web容器的事件接口,实现接口的类在某个事件发生时自动被调用,Web容器有多个这样的事件接口,它们分别是:
  ·ServletContextListener 接口:Web容器启动和销毁的事件处理接口,接口中定义了两个方法。
  ·ServletContextAttributeListener接口:Web上下文属性发生更改时的事件处理接口。
  ·HttpSessionListener接口:Session创建和销毁事件的事件处理接口。
  ·HttpSessionAttributeListener接口:Session会话中属性对象更改的事件处理接口,该接口和我们在前面使用的HttpSessionBindingListener接口相似。
  此外在J2EE1.4中还提供了另外两个事件处理接口,它们是:
  ·ServletRequestListener接口:Request请求对象创建和销毁事件处理接口。
  ·ServletRequestAttributeListener接口:更改Request中属性对象时的事件处理接口。
使用aspectJ 的aop嘛。。。
很简单
给你一个简单的例子,这样好下手:
JBuilder2005实战JSP之日志和部署.用户登录和退出日志
这个就是设计一个数据库表在用户登录时把它的登录时间,ip地址,用户名等等记录到数据库中。用户登录成功后将用户的登录信息写到数据库中。做的高级点的erp软件还能把用户做了哪些操作记录下来。
大致思路:
1.根据日志设计数据库表
2.登录成功,把登录信息写到表中。
3.用户推出或者注销把用户的注销,退出信息写到表中。
如果想做一个单点登录系统,登录时检测用户是否是活跃状态,是的不让登录,那这个就是单点登录了(SSO)
关于SSO可以参考参考:
url:/luiweiping002/archive//1649266.html
已解决问题
未解决问题

我要回帖

更多关于 内部类有什么作用 的文章

 

随机推荐