监听器----如何使用监听器记录注册用户的在线状态?

首先写一个登陆界面----index.jsp

<body>
    <form action="${pageContext.request.contextPath }/loginServlet" method="post">
        用户名:<input name="uname"/><br/>
        密码:<input name="pwd" type="password"/><br/>
        <input type="submit" value="登录"/>
    </form>
  </body>

点击登陆,跳转至----loginServlet

@WebServlet(name="loginServlet",urlPatterns="/loginServlet") //Serclet3.0注解配置
public class LoginServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String name = request.getParameter("uname"); //获取用户名
        String pwd = request.getParameter("pwd");   //获取密码
        if("jack".equals(name) && "bdqn".equals(pwd)){  //判断用户名与密码是否正确
            request.getSession().setAttribute("name", name);   //将name放到session作用域里
            request.getRequestDispatcher("online.jsp").forward(request, response); //跳转至登录成功界面
        }else if ("tom".equals(name) && "123".equals(pwd)) { //第二个用户
            request.getSession().setAttribute("name", name);
            request.getRequestDispatcher("online.jsp").forward(request, response);
        }else {
            request.getRequestDispatcher("401.jsp").forward(request, response); //如果未成功登录,跳转至401界面,可返回重新登录
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

未成功登陆----401.jsp

<body>
    请先登录,点击返回<a href="${pageContext.request.contextPath }/index.jsp">登录</a>页面
</body>

成功登录---online.jsp

<body>
    登录成功!当前在线人数:${applicationScope.num } <!-- 监听器获取在线人数 -->
    <a href="${pageContext.request.contextPath }/logoutServlet">退出</a>
</body>

退出处理----LogoutServlet

@WebServlet(name="logoutServlet",urlPatterns="/logoutServlet")
public class LogoutServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.getSession().removeAttribute("name");
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

设置监听器----首先需要在web.xml里配置

<listener>
      <listener-class>cn.bdqn.listener.DemoListemer</listener-class>
  </listener>

监听器类  DemoListemer  继承  HttpSessionAttributeListener  接口

public class DemoListemer implements HttpSessionAttributeListener{

    @Override
    public void attributeAdded(HttpSessionBindingEvent event) {
        int num=0;  //定义初始在线人数为0
        ServletContext servletContext = event.getSession().getServletContext();//使用session来判断是否为注册用户
        Object object = servletContext.getAttribute("num");  //获取人数num
        if(object==null){
            num=1;  //object为null,说明是第一个登录的用户
        }else {
            num=(Integer)object+1;  //如果不为null,就在原人数上+1;
        }
        servletContext.setAttribute("num", num);
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
        ServletContext servletContext = event.getSession().getServletContext();
        Object object = servletContext.getAttribute("num"); //获取人数num
        int num=(Integer)object-1;  //退出登录后人数-1
        servletContext.setAttribute("num", num);  //变更人数后设置给num
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent event) {
        // TODO Auto-generated method stub

    }
}

登录成功页面图

时间: 2024-08-05 18:59:08

监听器----如何使用监听器记录注册用户的在线状态?的相关文章

ORACLE 记录连接用户的IP地址以及登录失败用户的IP地址

前言:实现的功能主要是,oracle登录成功记录登录用户ip地址,登录失败记录登录失败ip地址 1,需要建立一个触发器记录登录成功的客户端用户的ip地址 大家都知道在v$session 中记录着客户端的机器名称,但是没有IP , 如果记录clinet ip 呢?先运行DBMS_SESSION 过程包注册,然后执行存储过程on_logon_trigger,这样当客户端登陆后,在v$session的client_info列会记录其相应的IP信息. 利用 DBMS_SESSION 过程包,先执行 BE

【摘自网络】每个注册用户都有自已的二级域名

以下是以www.devin.cn这个域名为例,让每个注册用户都有自已的二级域名,其中abc.devin.cn就是要用到的二级域名基本思路: 1. 域名支持泛解析,即是指:把A记录 *.devin.cn 解析到服务器IP,服务器IIS中做绑定,绑定时主机头为空; 2. 为了实现完全的二级域,建两个站点,一个为主站用,一个为用户用,两个站点目录都指到一个同一网站目录 3. 在Web程序中或取URL来源中的二级域名主机头,比如:abc.devin.cn 中的 abc; 4. 用获取来的二级域名名称,存

【从0开始Tornado建站】显示所有注册用户

显示注册用户的前台主要代码如下: {%block content%} <ul> {%for i in users%} <li><a href='/user/{{i[1]}}' class='text-success h4'>{{i[1]}}<small>({{i[3]}}星级)</small></a></li> {%end%} <br/> </ul> {%end%} 显示注册用户的后台代码如下: c

WordPress 前端投稿/编辑插件 DJD Site Post(支持游客和已注册用户)

说到前端用户投稿,倡萌之前推荐过3个不错的插件: WordPress匿名投稿插件:DX-Contribute (有朋友反馈不能用) WordPress投稿插件:User Submitted Posts (貌似没有集成编辑器,编辑文章不是很方便) WordPress 前端用户中心插件:WP User Frontend (免费版功能不太齐全) 今天要给大家推荐的这个 WordPress 前端投稿/编辑插件 DJD Site Post,它不仅支持已注册用户投稿,还支持给匿名游客投稿,而且在投稿界面添加

WordPress 前端投稿/编辑发表文章插件 DJD Site Post(支持游客和已注册用户)汉化版 免费下载

插件简介 前面逍遥乐给大家推荐了 WordPress用户前端化专业版WP User Frontend Pro WordPress中文汉化插件v2.1.9 今天逍遥乐给大家带来的wordpress插件是 WordPress 前端投稿/编辑插件 DJD Site Post,它不仅支持已注册用户投稿,还支持给匿名游客投稿,而且在投稿界面添加了登录链接,登录成功后自动返回投稿界面,体验很不错.该插件还允许用户上传媒体文件,集成WP自身的编辑器(可后台设置),支持选择分类和添加标签等等.支持有新文章投稿时

坚果云的成长烦恼:互联网巨头乌云笼罩(1年多时间, 坚果云已经拥有接近百万注册用户)

来源:新闻媒体 编辑:武陵门户网 更新时间:2013-05-18 特约记者 赵凤玲 上海报道 自从用上了坚果云,李俊(化名)再也没有专门为了某个文件而跑一趟公司.而李俊所在的五个人的市场团队再也不用频繁地相互转发最新的市场策划文本,只要有人在坚果云团队版中更新文档,就可以保证团队中所有人手上的文档总是最新的.这不仅减少了每个人邮件转发文本的麻烦,还可以确保每个人对外发送文本的一致,避免了错误地使用“过期”文本给客户带来的困扰. 从去年3月份上线至今,坚果云已经拥有接近百万注册用户,用户日活跃率达

使用Django实现用户登录,并记录登录用户的Cookies

用户登录的过程就是拿表单信息和数据库中的信息核对,如果正确就记录下用户的Cookies. 定义登录表单类型 class LoginForm(forms.Form): username = forms.CharField(label='用户名:',max_length=30) password = forms.CharField(label='密码:',widget=forms.PasswordInput()) 判断用户名是否在数据库中 def login_validate(request,use

记录每个用户的操作记录

linux系统环境下,不管是root用户还是其他的用户只有登录系统后的操作都可以通过命令history查看历史记录. 假如一台服务器有多人登录,一天因为某人误删了重要的数据 这时通过history是没有什么意义的,那有没有办法实现通过记录登录后的ip地址和登录的用户名分类记录操作的历史记录呢? #vim /etc/profile    配置文件里添加如下代码 #PS1="`whoami`@`hostname`:"'[$PWD]' history USER_IP=`who -u am i

discuz 限制只能中文注册用户名称

1:修改uc_client\model\user.php function check_username($username) { $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8'; $len = $this->dstrlen($username); if($len > 15 || $len < 3 || !(preg_match("/^[\x{4e00}-\x{9fa5}]+$/