欢迎来到天天文库
浏览记录
ID:40965890
大小:334.50 KB
页数:7页
时间:2019-08-12
《jsp在线聊天设计文档》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在线答疑功能模块总结一、实现原理1.在线用户统计一种是页面刷新由用户控制,服务器端控制一个超时时间比如30分钟,到了时间之后用户没有动作就被踢出。这种方法的优点是,如果用户忘了退出,可以防止别人恶意操作。缺点是,如果你在做一件很耗时间的事情,超过了这个时间限制,submit的时候可能要再次面临登陆。如果原来的叶面又是强制失效的话,就有可能丢失你做的工作。在实现的角度来看,这是最简单的,Server端默认实现的就是这样的模式。 另一种方式是,站点采用框架结构,有一个Frame或者隐藏的iframe在不断刷新,这样你永远不会被踢出,但是服务器端为了判断你是否在线,需要定一个
2、发呆时间,如果超过这个发呆时间你除了这个自动刷新的页面外没有刷新其他页面的话,就认为你已经不在线了。采取这种方式的典型是xici.net。他的优点是可以利用不断的刷新实现一些类似server-push的功能,比如网友之间发送消息。绵阳科贸网项目在线答疑采用的是第一种模式。利用Servlet规范中定义的事件监听器(Listener)来解决这个问题,实现更准确的在线人数统计功能。对每一个正在访问的用户,J2EE应用服务器会为其建立一个对应的HttpSession对象。当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象,并触发HttpSes
3、sion创建事件,如果注册了HttpSession事件监听器,则会调用HttpSessionListener事件监听器的SessionCreated方法。相反,当这个浏览器访问结束超时的时候,J2EE应用服务器会销毁相应的HttpSession对象,触发HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的SessionDestroyed方法。1)创建一个新的类OnLineDemo来实现ServletContextListener,HttpSessionListener,HttpSessionAttributeListener接口
4、,并实现以下方法:publicvoidcontextInitialized(ServletContextEventsce){}publicvoidcontextDestroyed(ServletContextEventsce){System.out.println("contextDestroy");}publicvoidsessionCreated(HttpSessionEventse){}publicvoidsessionDestroyed(HttpSessionEventse){}publicvoidattributeAdded(HttpSessionBinding
5、Eventse){}publicvoidattributeRemoved(HttpSessionBindingEventse){}publicvoidattributeReplaced(HttpSessionBindingEventse){}另外写一个addUser(UserInfouserInfo)方法;这个方法主要用来判断新登陆的用户是否已经存在,如果不存在就存放到用户集合中。注:此方法在attributeAdded(HttpSessionBindingEventse)和attributeReplaced(HttpSessionBindingEventse)中被调用。
6、实现方法调用说明:在实现类OnLineDemo中声明一个ServletContext对象:application;在contextInitialized(ServletContextEventsce)方法中上下文初始化时,向application中存放一个空的Vector容器。当用户每次登陆时,用户对象存放到Session,注册了HttpSession事件监听器,则会调用HttpSessionListener事件监听器的attributeAdded(HttpSessionBindingEventse)方法,获取到保存用户对象的Session,并调用addUser(User
7、InfouserInfo)将登录用户存放到Vector这个容器里;当关闭页面或注销用户时,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed(HttpSessionEventse)方法销毁用户。1)把这个HttpSessionListener实现类注册到网站应用中,也就是在网站应用的web.xml中加入如下内容:cn.mldn.lxh.listener.OnLineDemo
此文档下载收益归作者所有