JavaWeb-Listener2-在线用户统计

本文介绍了一个简单的在线人数统计系统的设计与实现。系统通过监听HTTP会话事件,利用HttpSessionBindingListener接口更新在线人数计数器,并展示给已登录用户。文章提供了从登录页面到退出流程的完整代码示例。

话说:

各位读者,早安!前面专门有一篇博客介绍Listener的,这篇来点好玩的。

我们要实现的功能是这样的:一尊贵的来宾来访问enter.jsp,登陆后,跳转到online.jsp,页面显示来宾姓名和在线人数;因为我们用的是HttpSessionBindingListener,所以我们用不同浏览器访问测试:
目的很简单,也是运用一下监听器喽。

这里写图片描述

这里写图片描述

这里写图片描述

这里用的是360先测试,一会用专业浏览器谷歌哈。
以下是这个玩耍过程的整体布局:

这里写图片描述

先上三个页面 :

enter.jsp


<%--
  User: Meice
  Date: 2017/10/9
  Time: 23:23
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <form action="login.do" method="post">
        来宾名:<input  type="text" name="gustName"/><br/>
        <input type="submit" value="进入">
    </form>

</body>
</html>

online.jsp

<%@ page import="com.hmc.listener.util.OnLineUtil" %><%--
  User: Meice
  Date: 2017/10/10
  Time: 8:07
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>统计在线人数</title>
    <%
     String username =   request.getParameter("username");
    %>
</head>
<body>
   <h2>您好: ${user.name}</h2>
    <h2>此时的在线人数为:<%=OnLineUtil.ONLINE_COUNT %> <br/></h2>
    <a href="loginOut.do">离开</a>
</body>
</html>

User
这个实体类,用来实现HttpSessionListener接口,实现登陆用户在线统计,是这里面最核心的功能

package com.hmc.listener.model;
import com.hmc.listener.util.OnLineUtil;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * User:Meice
 * 2017/10/11
 */
public class User implements HttpSessionBindingListener {
    private String name;
    public User() {}
    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent)
    {
        OnLineUtil.ONLINE_COUNT++;
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        OnLineUtil.ONLINE_COUNT--;

    }
}

LoginServlet
用户登陆后,接收参数并实现页面跳转

package com.hmc.listener.servlet;
import com.hmc.listener.model.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * User:Meice
 * 2017/10/11
 */
//@WebFilter(urlPatterns = "/*",
//        initParams = {
//                @WebInitParam(name = "encoding",value = "UTF-8")
//        })
@WebServlet(urlPatterns = "/login.do")

public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //接收参数
        String gustName =  req.getParameter("gustName");

        //实例化User
        User user = new User(gustName);
         req.getSession().setAttribute("user",user);
        //页面跳转
        resp.sendRedirect("online.jsp");


    }
}

LoginOutServlet
功能:点击离开,实现用户销毁

package com.hmc.listener.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * User:Meice
 * 2017/10/11
 */
@WebServlet(urlPatterns = "/loginOut.do")
public class LoginOutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //销毁session
        req.getSession().invalidate();
        resp.sendRedirect("enter.jsp");
    }
}

OnLineUtil

就是用户统计的一个常量存放

package com.hmc.listener.util;

/**
 * User:Meice
 * 2017/10/11
 */
public class OnLineUtil {
    //为便于调用且数量开始是常量所以定义为static
    public static int ONLINE_COUNT=0;
}

结果是这样的:

这里写图片描述

这里写图片描述

这里写图片描述

原谅我没有更多的浏览器了。。。。。。
如果让很多人访问,场面一定很壮观!OK,到这里吧。下期再见!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值