捕获Session事件的意义

捕获Session事件的意义:1、记录网站的客户登录日志(登录,退出信息等)2、统计在线人数3、等等还有很多,呵呵,自己想吧……总之挺重要的。Session代表客户的会话过程,客户登录时,往Session中传入一个对象,即可跟踪客户的会话。在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或SessionTimeout的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。由此可知,登录日志也就不难实现了。另外一个问题是,如何统计在线人数,这个问题跟实现登录日志稍微有点不同,统计在线人数(及其信息),就是统计现在有多少个Session实例存在,我们可以增加一个计数器(如果想存储更多的信息,可以用一个对象来做计数器,随后给出的实例中,简单起见,用一个整数变量作为计数器),通过在valueBound方法中给计数器加1,valueUnbound方法中计数器减1,即可实现在线人数的统计。当然,这里面要利用到ServletContext的全局特性。(有关ServletContext的叙述请参考Servlet规范),新建一个监听器,并将其实例存入ServletContext的属性中,以保证此监听器实例的唯一性,当客户登录时,先判断ServletContext的这个属性是否为空,如果不为空,证明已经创建,直接将此属性取出放入Session中,计数器加1;如果为空则创建一个新的监听器,并存入ServletContext的属性中。举例说明:实现一个监听器://SessionListener.javaimportjava.io.*;importjava.util.*;importjavax.servlet..*;//监听登录的整个过程publicclassSessionListenerimplementsHttpSessionBindingListener{publicStringprivateInfo="";//生成监听器的初始化参数字符串privateStringlogString="";//日志记录字符串privateintcount=0;//登录人数计数器publicSessionListener(Stringinfo){this.privateInfo=info;}publicintgetCount(){returncount;}publicvoidvalueBound(HttpSessionBindingEventevent){count++;if(privateInfo.equals("count")){return;}try{Calendarcalendar=newGregorianCalendar();System.out.println("LOGIN:"+privateInfo+"TIME:"+calendar.getTime());logString="\nLOGIN:"+privateInfo+"TIME:"+calendar.getTime()+"\n";for(inti=1;i<1000;i++){Filefile=newFile("yeeyoo.log"+i);if(!(file.exists()))file.createNewFile();//如果文件不存在,创建此文件if(file.length()>1048576)//如果文件大于1M,重新创建一个文件continue;FileOutputStreamfoo=newFileOutputStream("yeeyoo.log"+i,true);//以append方式打开创建文件foo.write(logString.getBytes(),0,logString.length());//写入日志字符串foo.close();break;//退出}}catch(FileNotFoundExceptione){}catch(IOExceptione){}}publicvoidvalueUnbound(HttpSessionBindingEventevent){count--;if(privateInfo.equals("count")){return;}try{Calendarcalendar=newGregorianCalendar();System.out.println("LOGOUT:"+privateInfo+"TIME:"+calendar.getTime());logString="\nLOGOUT:"+privateInfo+"TIME:"+calendar.getTime()+"\n";for(inti=1;i<1000;i++){Filefile=newFile("yeeyoo.log"+i);if(!(file.exists()))file.createNewFile();//如果文件不存在,创建此文件if(file.length()>1048576)//如果文件大于1M,重新创建一个文件continue;FileOutputStreamfoo=newFileOutputStream("yeeyoo.log"+i,true);//以append方式打开创建文件foo.write(logString.getBytes(),0,logString.length());//写入日志字符串foo.close();break;//退出}}catch(FileNotFoundExceptione){}catch(IOExceptione){}}}登录日志的实现:下面再来看看我们的登录Servlet中使用这个监听器的部分源代码:……HttpSessionsession=req.getSession(true);……SessionListenersessionListener=newSessionListener("IP:"+req.get...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?