您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java如何實現統計在線人數功能的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java如何實現統計在線人數功能文章都會有所收獲,下面我們一起來看看吧。
監聽器就是一個實現特定接口的普通java程序,這個程序專門用于監聽另一個java對象的方法調用或屬性改變,當被監聽對象發生上述事件后,監聽器某個方法將立即被執行。
用于監聽WEB,應用啟動和銷毀的事件
public void contextInitialized(ServletContextEvent sce):在初始化web應用時執行
public void contextDestroyed(ServletContextEvent sce) {}:在銷毀web應用時執行
用于監聽Session對象的創建和銷毀
public void sessionCreated(HttpSessionEvent se) {}:session創建的時候執行
public void sessionDestroyed(HttpSessionEvent se) {}: session被銷毀的時候執行
用于監聽Requset對象的創建和銷毀
public void requsetCreated(HttpSessionEvent se) {}:requset創建的時候執行
public void requestDestroyed(HttpSessionEvent se) {}: requset被銷毀的時候執行
用于監聽WEB作用域屬性的改動,包括:增加屬性、刪除屬性、修改屬性
attributeAdded(ServletContextEvent sce):向ServletContext中添加屬性時執行
attributeAdded(ServletContextRemoved sce):ServletContext中刪除屬性時執行
attributeReplaced(ServletContextRemoved sce):ServletContext中修改屬性時執行
用于監聽Session作用域屬性的改動,包括:增加屬性、刪除屬性、修改屬性
用于監聽Requset作用域屬性的改動,包括:增加屬性、刪除屬性、修改屬性
用于監聽某個對象在Session中的序列化和反序列化
(1)先創建監聽器包listener在新建OnlineListener類
package listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionBindingEvent; @WebListener() public class OnlineListener implements ServletContextListener,HttpSessionListener, HttpSessionAttributeListener { private static int count=0; public OnlineListener() {//構造函數 } // ServletContextListener的實現方法,在初始化web應用時執行,你可以在此處初始化server上下文相關數據 public void contextInitialized(ServletContextEvent sce) {//應用初始化完成 } // ServletContextListener的實現方法,在web應用關閉時執行 public void contextDestroyed(ServletContextEvent sce) { } // HttpSessionListener的實現方法,session被創建的時候執行 public void sessionCreated(HttpSessionEvent se) {//創建 count++; ServletContext app = se.getSession().getServletContext(); app.setAttribute("count",count); } // HttpSessionListener的實現方法,session被銷毀的時候執行 public void sessionDestroyed(HttpSessionEvent se) { count--; ServletContext app = se.getSession().getServletContext(); app.setAttribute("count",count); } }
(2)創建監聽器servlet的接口
import javax.servlet.ServletContext; 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; import java.io.PrintWriter; @WebServlet(name = "OnlineServlet",urlPatterns = "/online") public class OnlineServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String op=request.getParameter("op"); String result=""; switch (op){ case "login": //request.getSession()觸發監聽器的sessionCreated ServletContext app=request.getSession().getServletContext(); int count= (int) app.getAttribute("count"); result=String.format("當前%d人在線",count); break; case "logout": //銷毀session,觸發監聽器的sessionDestroy request.getSession().invalidate();//銷毀session result="您已經退出了!"; } response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); out.write(result); out.close(); } }
需求:平均訪問時常,平均同時在線人數,最高同時在線人數
(1)先設計數據表:
開始訪問頁面時間,離開頁面時間表:(id,place,ip,user_id,user_name, begin_time, end_time, env, info,len_min)
統計表:平均訪問時常,平均同時在線人數,最高同時在線人數(id,day,age_len_visit_min, acu, pcu)
統計記錄表:每分鐘的同時在線人數。 (id,min_time, num)
(2)使用redis存儲當前在線用戶,每次調用可以看作瀏覽了一分鐘(根據業務可以再細化,只需要定時任務記錄上次一分鐘和當前一分鐘的用戶,即可算出,某一個用戶在某個頁面的訪問時常。
(3)同時記錄用戶開始訪問頁面時間,離開頁面時間,即可分析出后續。
(4)為方便數據處理,可以記錄每個頁面每分鐘的訪問量。
(5)redis, 存儲2個hash:
begin,定時器存儲到的hash集合,記錄詳細信息
now,接口傳遞過來的用戶訪問集合,記錄刷新時間
通過定時器來進行更新,刷新操作。
ps: hash中單獨的key不可以自動設置過期,或者使用redis監聽,使用String類型的key,監聽是過濾,匹配到自己需要處理的再進行處理即可。
關于“Java如何實現統計在線人數功能”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Java如何實現統計在線人數功能”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。