JavaWeb(入門篇19)監聽器listener實現在線人數統計。

一、監聽器listener實現在線人數統計。

1.實現功能

實現HttpSessionListener接口,寫一個監聽類,完成對網站在人數的監聽

2.核心代碼

記錄所有用戶的數據,把生命期提取到 Application (ServletContext)層。

        if (context.getAttribute("onlineUsers")!=null){
            context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")+1);
        }

3.框架

1.ServletContext作用域(生命週期)
在這裏插入圖片描述

4。代碼

1.測試類,顯示人數的頁面

package com.bmft.listener;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 監聽器的測試類,展示在線時間
 */
public class ListenerTest01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("<h1>onlineUser = " +
                this.getServletContext().getAttribute("onlineUsers"));
    }

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

2.監聽類,實現監聽

package com.bmft.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 實現HttpSessionListener接口,
 * 寫一個監聽類,完成對網站在人數的監聽
 */
public class Listener01 implements HttpSessionListener {
    private ServletContext context = null;
    //當一個用戶打開網站的時候開啓創建session執行的方法
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
         context = httpSessionEvent.getSession().getServletContext();
        if (context.getAttribute("onlineUsers")!=null){
            context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")+1);
        }
        else {
            context.setAttribute("onlineUsers", 1);
        }
        System.out.println("=====有一位用戶上線了=====");
        System.out.println("Id: "+httpSessionEvent.getSession().getId()+"=====");
    }
    //關閉網站的時候銷燬session執行的的方法
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        context = httpSessionEvent.getSession().getServletContext();
        if (context.getAttribute("onlineUsers")!=null){
            context.setAttribute("onlineUsers", 0);
        }
        else {
            context.setAttribute("onlineUsers",(Integer)context.getAttribute("onlineUsers")-1);
        }
        System.out.println("=====用戶下線了=====");
        System.out.println("Id: "+httpSessionEvent.getSession().getId()+"=====");
    }
}

3.映射

  <!--監聽器測試類ListenerTest01映射-->
  <servlet>
    <servlet-name>ListenerTest01</servlet-name>
    <servlet-class>com.bmft.listener.ListenerTest01</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ListenerTest01</servlet-name>
    <url-pattern>/ListenerTest01</url-pattern>
  </servlet-mapping>
  <!--監聽映射-->
  <listener>
    <listener-class>com.bmft.listener.Listener01</listener-class>
  </listener>
  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>

5.頁面展示

在這裏插入圖片描述
在這裏插入圖片描述

二、錯誤 與解決

1.無法聯網下載

在這裏插入圖片描述
錯誤信息

Cannot access aliyunmaven (https://maven.aliyun.com/repository/public) in offline mode and the artifact org.apache.maven.plugins:maven-jar-plugin:pom:2.4 has not been downloaded from it before.

解決:
在這裏插入圖片描述

2.如何實現session的自動超時自動銷燬

web.xml

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

3.爲何session無變化?

待解決。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章