Servlet基础(四:统计登录人数)

来源:互联网 发布:单片机usb转串口 编辑:程序博客网 时间:2024/06/06 03:13

使用Listener监听器来实现,统计登录的用户数量。
1:首先,写一个登录界面

<html>  <head>    <title>Login</title>  </head>  <body>  <form action="first" method="post">    <input type="text" name="username"/><br>    <input type="password" name="password"/><br>    <input type="submit" value="登录"/>  </form>  </body></html>

2:响应登录的Servlet

import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * Created by D丶ream on 2015/12/14. */public class LogoutServlet extends HttpServlet {    @Override    public void init() throws ServletException {    }    @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 {        req.getSession().invalidate();        req.getRequestDispatcher("/index.jsp").forward(req,resp);    }    @Override    public void destroy() {        super.destroy();    }}

3:显示登录人数的和当前登录用户的页面

<html><head>    <title>Title</title></head><body>    欢迎:${sessionScope.username}<br>    <a href="second" methods="post">退出</a><br><%    ArrayList list = (ArrayList) getServletConfig().getServletContext().getAttribute("list");    out.print("在线人数"+list.size()+"<br>");    for(Object l:list){        out.print(l+"<br>");    }%></body></html>

4:实现统计登录人数的Listener

import javax.servlet.ServletContext;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import java.util.ArrayList;import java.util.List;/** * Created by D丶ream on 2015/12/14. */public class listenerTest implements HttpSessionListener,HttpSessionAttributeListener {    List list = new ArrayList();    ServletContext sc;    @Override   // 创建session时候执行    public void sessionCreated(HttpSessionEvent httpSessionEvent) {        sc = httpSessionEvent.getSession().getServletContext();    }    @Override    //销毁session时候执行    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {        list.remove(httpSessionEvent.getSession().getAttribute("username"));        sc.setAttribute("list",list);    }    @Override    // 在session中添加对象时触发此操作,在list中添加一个对象    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {        list.add(httpSessionBindingEvent.getValue());        sc.setAttribute("list",list);    }    @Override    //修改或删除session对象时执行下面方法    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {    }    @Override    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {    }}

5:退出功能的Servlet

import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * Created by D丶ream on 2015/12/14. */public class LogoutServlet extends HttpServlet {    @Override    public void init() throws ServletException {    }    @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 {        req.getSession().invalidate();//注销session        req.getRequestDispatcher("/index.jsp").forward(req,resp);//转发    }    @Override    public void destroy() {        super.destroy();    }}

6:最后是XML的配置

    <servlet>        <servlet-name>first</servlet-name>        <servlet-class>com.dream.servlet.servletTest</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>first</servlet-name>        <url-pattern>/first</url-pattern>    </servlet-mapping>    <servlet>        <servlet-name>second</servlet-name>        <servlet-class>com.dream.servlet.LogoutServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>second</servlet-name>        <url-pattern>/second</url-pattern>    </servlet-mapping>    <listener>        <listener-class>com.dream.listener.listenerTest</listener-class>    </listener>

非常基础的一个实现,更多的功能或者方法,后续会有更新

0 0