监听器之实现在线人数统计

监听器

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)+"&nbsp;&nbsp;&nbsp;&nbsp;");
   }
%>

</body>



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值