监听器之实现在线人数统计
监听器
1、概念:
servlet监听器的主要目的是给web应用增加事件处理机制,以便更好的监视和控制web应用的状态变化,从而在后台调用相应处理程序。
2、监听器类型
注:
ServletRequest: 监听客户端的请求
ServletRequestListener: 监听客户端的请求初始化和销毁时间
ServletRequestAttributeListener: 监听web应用属性改变的事件,包括增加,删除,修改属性
HttpSession: 会话监听
HttpSessionListener: 监听session创建和销毁
HttpSessionActivationListener: 监听htpp会话
HttpSessionAttributeListener: 监听HttpSession中属性的操作
HttpSessionBindingListener: 监听http会话中对象的绑定信息
ServletContext: 监听web应用
ServletContextListener: 监听web应用启动和销毁的事件
ServletContextAttributeListener: 监听web应用属性改变的事件
3、实现在线人数统计
(1)、页面登录界面(login.jsp)
<center>
<form action="dologin.jsp" method="post">
<input type="text" name="username"/>
<input type="submit" value="LOGIN"/>
</form>
</center>
(2)、存储用户信息的类(UserList.java)
package com.jtq;
import java.util.ArrayList;
import java.util.List;
public class UserList {
private static List<String> online=new ArrayList<String>();
public static void addUser(String username){
online.add(username);
}
public static void removeUser(String username){
online.remove(username);
}
//总数
public static int getUserCount(){
return online.size();
}
//人员信息
public static List<String> getList(){
return online;
}
}
(3)、监听器类(OnlineListener.java)
package com.jtq;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
//监听器类
public class OnlineListener implements HttpSessionListener,HttpSessionAttributeListener{
@Override
public void attributeAdded(HttpSessionBindingEvent hsb) {
UserList.addUser(String.valueOf(hsb.getValue()));
}
@Override
public void attributeRemoved(HttpSessionBindingEvent hsb) {
UserList.removeUser(String.valueOf(hsb.getValue()));
}
@Override
public void attributeReplaced(HttpSessionBindingEvent hsb) {
String oldString=String.valueOf(hsb.getName());
String newString=String.valueOf(hsb.getSession().getAttribute(hsb.getName()));
UserList.removeUser(oldString);
UserList.addUser(newString);
}
@Override
public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
}
}
(4)、创建用户登录类(UserOnlineServlet.java)
......
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username=request.getParameter("username");
//获取session
HttpSession session=request.getSession();
session.setAttribute("username", username);
response.sendRedirect("index.jsp");
}
(5)、建立退出登录类(UserExitServlet.java)
......
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().removeAttribute("username");
response.sendRedirect("login.jsp");
}
(6)、配置web.xml 培训监听器,登录和退出的servlet
<listener>
<listener-class>com.jtq.OnlineListener</listener-class>
</listener>
<servlet>
<servlet-name>UserOnlineServlet</servlet-name>
<servlet-class>com.jtq.UserOnlineServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserOnlineServlet</servlet-name>
<url-pattern>/online</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UserExitServlet</servlet-name>
<servlet-class>com.jtq.UserExitServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserExitServlet</servlet-name>
<url-pattern>/exit</url-pattern>
</servlet-mapping>
(7)、在线首页(index.jsp)
<body>
<%
String username=(String)session.getAttribute("username");
if(username==null){
response.sendRedirect("login.jsp");
}
List<String> list=UserList.getList();
%>
<h2>登录成功</h2><br>
欢迎你,<span><%=session.getAttribute("username") %></span><br>
<a href="exit">注销</a><br>
在线人数:<span><%=UserList.getUserCount() %></span><br>
在线人数名单:<br>
<%
for(int i=0;i<UserList.getList().size();i++){
out.print(UserList.getList().get(i)+" ");
}
%>
</body>