java web監聽器統計線上使用者及人數

來源:互聯網
上載者:User

標籤:bsp   否則   工具類   使用者資訊   util   null   --   attr   http   

線上使用者使用HttpSessionListener監聽器統計  

每當一個session會話建立  線上使用者人數+1

每當一個session會話銷毀 線上使用者人數-1


使用ServletRequestListener監聽器統計使用者資訊

每當一個request建立  將目前使用者放入集合

每當session會話銷毀  將目前使用者移出集合


我使用的是Servlet3.0  監聽器直接使用註解@webListener即可 不用在web.xml中布局

在web.xml中配置session-timeout標籤  標誌session到期時間為1分鐘  0為不到期

  <session-config>  <session-timeout>1</session-timeout>  </session-config>


servlet3.0使用條件



運行結果:


由於session對話關閉時間並不一定以設定的1分鐘為準 所以 gif映像中最後等待時間較長

User 實體類

package com.scx.entity;/** * 使用者實體類 * */public class User {//目前使用者的session idprivate String sessionId;//目前使用者的ip地址private String ip;//目前使用者第一次訪問的時間private String firstTime;public User() {super();}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getFirstTime() {return firstTime;}public void setFirstTime(String firstTime) {this.firstTime = firstTime;}public String getSessionId() {return sessionId;}public void setSessionId(String sessionId) {this.sessionId = sessionId;}}

HttpSessionListener監聽器

package com.scx.listener;import java.util.ArrayList;import javax.servlet.annotation.WebListener;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import com.scx.entity.User;import com.scx.util.SessionUtil;/** * HttpSessionListener 監聽器 * */@WebListenerpublic class MyHttpSessionListener implements HttpSessionListener{//目前使用者數private int userCounts=0;@Overridepublic void sessionCreated(HttpSessionEvent se) {//sessionCreated  使用者數+1userCounts++;//重新在servletContext中儲存userCountsse.getSession().getServletContext().setAttribute("userCounts", userCounts);}@Overridepublic void sessionDestroyed(HttpSessionEvent se) {//sessionDestroyed  使用者數-1userCounts--;//重新在servletContext中儲存userCountsse.getSession().getServletContext().setAttribute("userCounts", userCounts);@SuppressWarnings("unchecked")ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList");String sessionId=se.getSession().getId();//如果目前使用者在userList中  在session銷毀時  將目前使用者移出userListif(SessionUtil.getUserBySessionId(userList, sessionId)!=null){userList.remove(SessionUtil.getUserBySessionId(userList, sessionId));}//將userList集合  重新儲存到servletContextse.getSession().getServletContext().setAttribute("userList", userList);}}


ServletRequestListener監聽器

package com.scx.listener;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;import javax.servlet.annotation.WebListener;import javax.servlet.http.HttpServletRequest;import com.scx.entity.User;import com.scx.util.SessionUtil;/** * ServletRequestListener 監聽器 * */@WebListenerpublic class MyServletRequestListener implements ServletRequestListener {//使用者集合private ArrayList<User> userList;@Overridepublic void requestDestroyed(ServletRequestEvent arg0) {}@SuppressWarnings("unchecked")@Overridepublic void requestInitialized(ServletRequestEvent arg0) {//從servletContext中獲的userListuserList=(ArrayList<User>) arg0.getServletContext().getAttribute("userList");//如果servletContext中沒有userList對象  初始化userListif(userList==null){userList=new ArrayList<User>();}HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest();//sessionIdString sessionId=request.getSession().getId();//如果當前sessionId不存在集合中  建立當前user對象if(SessionUtil.getUserBySessionId(userList,sessionId)==null){User user=new User();user.setSessionId(sessionId);user.setIp(request.getRemoteAddr());SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:MM:ss");user.setFirstTime(sdf.format(new Date()));userList.add(user);}//將userList集合 儲存到ServletContextarg0.getServletContext().setAttribute("userList", userList);}}

工具類

package com.scx.util;import java.util.ArrayList;import com.scx.entity.User;public class SessionUtil {//根據sessionId判斷目前使用者是否存在在集合中  如果存在 返回目前使用者  否則返回nullpublic static User getUserBySessionId(ArrayList<User> userList,String sessionId) {for (User user : userList) {if(sessionId.equals(user.getSessionId())){return user;}}return null;}}


java web監聽器統計線上使用者及人數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.