传智播客学习之Servlet监听器
来源:互联网 发布:python 面向对象 编辑:程序博客网 时间:2024/05/29 18:49
今天可谓是异常艰辛的一天,因为昨晚只能休息三个小时的原因,早上上课的时候特别的困乏,但是又十分舍不得今天的课程内容,因为老师将要和我们和大家分享一他项目中的一段精华,里面涉及到得内容主要是Servlet监听器,冯老师永远是一个培养应用型人才的老师,听他讲课只有一种感觉,那就是不是为了讲课而在讲课,而是感觉他就是一个项目经理。废话不多说了,接下来和大家分享一段实用的小程序吧。
一、项目需求:统计网站在线人数
二、业务流程分析:通过了解需求,我们可以得到如下的流程:
三.功能分析:
1. 后台界面显示游客ip功能
2. 后台管理页面显示登陆用户的ip
3. 过滤游客即不登陆不能进入chapter.jsp以及title.jsp
4. 后台管理页面可以将不合法的登陆用户变成游客
5. 将长期不在线的用户(session失效的用户)排除在记录数种
四、.设计
我们要想记录当前总在线人数,那么我们需要注册一个随服务器启动而创建,随服务器消亡而消亡的监听器,这里我们选用建立一个监听器类实现ServletContextListener监听器接口,从总体功能分析,我们需要有一个存放用户信息的容器,这里我们选用Map,并在服务器启动初始化。每一个用户登录都有用户名和密码,那么我们需要一个javabean(User)来封装用户信息。
public void contextInitialized(ServletContextEvent sce) {
System.out.println("MyServletContextListener contextInitialized");
//获取上下文对象
ServletContext sc=sce.getServletContext();
//定义集合存放游客和登录用户Map<sessionid,sessionUser>
Map onlineNum=new HashMap();
//集合放置到作用域中(范围最大的)
sc.setAttribute("onlineNum", onlineNum);
}
功能1:后台界面显示游客ip功能
我们要想在后台界面显示游客ip,只用判断用户名是否为空即可,我们需要在游客访问时,获取ip并将这个ip传递给后台界面,那么我们可以在index.jsp中通过request对象获取ip地址,然后放在一个作用域中(通过后面的设计,同时当用户利用用户名登录的时候,我们需要注册一个监听,获取其ip等信息,所以我们想到了感知Session绑定的事件的监听器(HttpSessionBindingListener),在使用此监听器时,我们需要让javabean实现这个接口,为了不破坏原有的javabean,我们选择使用一个新的类,继承javabean并实现HttpSessionBindingListener接口,我们将它封装到一个javabean中即SessionUser,并将这个对象放置到Session中),然后我们在后台界面上通过el表达式取出该ip。
public void valueBound(HttpSessionBindingEvent event){
HttpSession session=event.getSession();//从event中回去session对象
this.session=session; //给全局变量的session 赋值
ServletContext sc=session.getServletContext(); //获取ServletContext,在整个web生命周期中只有一个
onlineNum=(Map)sc.getAttribute("onlineNum");//获取ServletContext中的onlineNum属性Map onlineNum.put(session.getId(), this);}
功能2:后台管理页面显示登陆用户的ip
Index.jsp提交到login.jsp,登录后提交给loginservlet,在欢迎界面设置了session的属性,这个session保存着。当一个用户访问页面并没有登录,而是在登录界面等待,超过了session的有效时间,再次输入用户名登录时,之前在index中设置的session已经失效,所以会创建一个新session,那么我们可以不让其创建新的session,通过getsession(false),session为空,所以我们可以新建一个SessionUser放进去,或者转发到登录页面让其重新登录。
方式一session不存在,转到index.jsp,session有效,转到title.jsp(转到chapt.er.jsp)
方式二、当游客存在的时候,session有效,游客不存在,session过期,此时是一个新的session,里面的属性肯定为空,出现问题,所以处理方式就是新建一个SessionUser放到里面
处理方式
功能3:过滤游客即不登陆不能进入chapter.jsp以及title.jsp
过滤游客,如果没有登录,不准进入除了首页其他页,可以通过<c:set>设置一个值放到作用域中,通过request到login.jsp页面,在chapter.jsp中判断用户名是否为空
<c:if test="${sessionScope.userinfo.username==null}">
<c:set value="请登录..." scope="request" var="errorinfo"></c:set>
<jsp:forward page="/WEB-INF/jsp/login.jsp"></jsp:forward>
</c:if>
功能4:后台管理页面可以将不合法的登陆用户变成游客
通过后台inlineNum.jsp转到RemooveServlet, 处理完毕再转到inlineNum.jsp,如何找到该不合法用户呢?通过map中的sessionid找到sessionUser找到用户名。
如何获得sessionId呢?需要将session传过去,定义一个全局变量,然后用这个session到集合中去找,找到变为游客
功能5:将长期不在线的用户(session失效的用户)排除在记录数种
当用户长时间未与服务器通信,session过期,session对象在服务器的内存中消失,即不存在,我们需要清除内存中的SessionUser,不然统计在线人数就不对了。我们可以注册一个HttpSessionListen监听器,通过sessiondDestroyed销毁那些对象,获取session,获取sessionId,servletcontext获得map,通过id删除map中的SessionUser,并从session中删除userinfo。
- 传智播客学习之Servlet监听器
- 【Servlet学习之】监听器
- java servlet学习之监听器类
- java servlet学习之监听器类
- java servlet学习之监听器类
- javaee学习之路(七)Servlet监听器
- 传智播客java web 学习,Servlet事件监听器
- Servlet规范学习 - 监听器
- servlet监听器的学习
- servlet监听器学习笔记
- servlet之监听器
- Servlet之Listener监听器
- Servlet之Listener监听器
- Servlet之监听器Listener
- Servlet之监听器
- Servlet/jsp之监听器
- Servlet之事件监听器
- JavaWeb学习篇之----Servlet过滤器Filter和监听器
- QCRTGraph CF简介
- JavaEE系列——第一章JavaEE概述
- 传智播客学习之Servlet过滤器
- JavaEE系列——第二章 Servlet基础
- MySQL中数据备份或转移后出现“使用中”和"doesn’t exist"解决办法
- 传智播客学习之Servlet监听器
- 安装Oracle检测linux内核参数
- 大学生集体户口面临孩子落户困境
- 一段比较巧妙的sql
- 传智播客学习之上传下载
- 传智播客学习之读取配置文件
- js改变表格颜色
- 微软Chart控件导学--从头开始
- mysql存储引擎之------InnoDB