最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java web監(jiān)聽器統(tǒng)計(jì)在線用戶及人數(shù)

 更新時(shí)間:2017年04月05日 14:47:04   作者:甄情  
本文主要介紹了java web監(jiān)聽器統(tǒng)計(jì)在線用戶及人數(shù)的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來看下吧

在線用戶使用HttpSessionListener監(jiān)聽器統(tǒng)計(jì) 

每當(dāng)一個(gè)session會(huì)話建立  在線用戶人數(shù)+1

每當(dāng)一個(gè)session會(huì)話銷毀 在線用戶人數(shù)-1

使用ServletRequestListener監(jiān)聽器統(tǒng)計(jì)用戶信息

每當(dāng)一個(gè)request建立  將當(dāng)前用戶放入集合

每當(dāng)session會(huì)話銷毀  將當(dāng)前用戶移出集合

我使用的是Servlet3.0  監(jiān)聽器直接使用注解@webListener即可 不用在web.xml中布局

在web.xml中配置session-timeout標(biāo)簽  標(biāo)志session過期時(shí)間為1分鐘  0為不過期

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

servlet3.0使用條件

運(yùn)行結(jié)果:

由于session對(duì)話關(guān)閉時(shí)間并不一定以設(shè)置的1分鐘為準(zhǔn) 所以 gif圖像中最后等待時(shí)間較長(zhǎng)

User 實(shí)體類

package com.scx.entity; 
/** 
 * 用戶實(shí)體類 
 * 
 */ 
public class User { 
  //當(dāng)前用戶的session id 
  private String sessionId; 
  //當(dāng)前用戶的ip地址 
  private String ip; 
  //當(dāng)前用戶第一次訪問的時(shí)間 
  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監(jiān)聽器

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 監(jiān)聽器 
 * 
 */ 
@WebListener 
public class MyHttpSessionListener implements HttpSessionListener{ 
  //當(dāng)前用戶數(shù) 
  private int userCounts=0; 
  @Override 
  public void sessionCreated(HttpSessionEvent se) { 
    //sessionCreated 用戶數(shù)+1 
    userCounts++; 
    //重新在servletContext中保存userCounts 
    se.getSession().getServletContext().setAttribute("userCounts", userCounts); 
  } 
  @Override 
  public void sessionDestroyed(HttpSessionEvent se) { 
    //sessionDestroyed 用戶數(shù)-1 
    userCounts--; 
    //重新在servletContext中保存userCounts 
    se.getSession().getServletContext().setAttribute("userCounts", userCounts); 
    @SuppressWarnings("unchecked") 
    ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList"); 
    String sessionId=se.getSession().getId(); 
    //如果當(dāng)前用戶在userList中 在session銷毀時(shí) 將當(dāng)前用戶移出userList 
    if(SessionUtil.getUserBySessionId(userList, sessionId)!=null){ 
      userList.remove(SessionUtil.getUserBySessionId(userList, sessionId)); 
    } 
    //將userList集合 重新保存到servletContext 
    se.getSession().getServletContext().setAttribute("userList", userList); 
  } 
} 

ServletRequestListener監(jiān)聽器

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 監(jiān)聽器 
 * 
 */ 
@WebListener 
public class MyServletRequestListener implements ServletRequestListener { 
  //用戶集合 
  private ArrayList<User> userList; 
  @Override 
  public void requestDestroyed(ServletRequestEvent arg0) { 
  } 
  @SuppressWarnings("unchecked") 
  @Override 
  public void requestInitialized(ServletRequestEvent arg0) { 
    //從servletContext中獲的userList 
    userList=(ArrayList<User>) arg0.getServletContext().getAttribute("userList"); 
    //如果servletContext中沒有userList對(duì)象 初始化userList 
    if(userList==null){ 
      userList=new ArrayList<User>(); 
    } 
    HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest(); 
    //sessionId 
    String sessionId=request.getSession().getId(); 
    //如果當(dāng)前sessionId不存在集合中 創(chuàng)建當(dāng)前user對(duì)象 
    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集合 保存到ServletContext 
    arg0.getServletContext().setAttribute("userList", userList); 
  } 
} 

工具類

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

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • java 單例模式和工廠模式實(shí)例詳解

    java 單例模式和工廠模式實(shí)例詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的單例模式和簡(jiǎn)單工廠模式以及實(shí)例,使用設(shè)計(jì)模式編寫代碼有利于團(tuán)隊(duì)協(xié)作時(shí)程序的維護(hù),需要的朋友可以參考下
    2017-04-04
  • MybatisPlus實(shí)現(xiàn)邏輯刪除的示例代碼

    MybatisPlus實(shí)現(xiàn)邏輯刪除的示例代碼

    本文主要介紹了Mybatis?Plus實(shí)現(xiàn)邏輯刪除的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 關(guān)于shiro中部分SpringCache失效問題的解決方法

    關(guān)于shiro中部分SpringCache失效問題的解決方法

    這篇文章主要給大家介紹了關(guān)于shiro中部分SpringCache失效問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 詳解Spring Boot 項(xiàng)目中的 parent

    詳解Spring Boot 項(xiàng)目中的 parent

    這篇文章主要介紹了Spring Boot中parent作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Mybatis 動(dòng)態(tài)sql的編寫與開啟二級(jí)緩存

    Mybatis 動(dòng)態(tài)sql的編寫與開啟二級(jí)緩存

    二級(jí)緩存是Mapper級(jí)別的緩存,多個(gè)SqlSession去操作同一個(gè)Mapper中的SQL語句,則這些SqlSession可以共享二級(jí)緩存,即二級(jí)緩存是跨SqlSession的,這篇文章主要介紹了Mybatis 動(dòng)態(tài)sql的編寫|開啟二級(jí)緩存,需要的朋友可以參考下
    2023-02-02
  • Spring空值和特殊字符的注入方式

    Spring空值和特殊字符的注入方式

    文章介紹了如何通過創(chuàng)建類、配置文件和測(cè)試代碼來實(shí)現(xiàn)空值和特殊字符注入,具體包括定義屬性、生成set方法、配置對(duì)象創(chuàng)建和屬性注入、以及編寫測(cè)試代碼進(jìn)行驗(yàn)證
    2024-11-11
  • SpringBoot?屬性配置中獲取值的方式

    SpringBoot?屬性配置中獲取值的方式

    這篇文章主要介紹了SpringBoot?屬性配置中獲取值的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • MyBatis查詢、新增、更新與刪除操作指南

    MyBatis查詢、新增、更新與刪除操作指南

    這篇文章主要給大家介紹了關(guān)于MyBatis查詢、新增、更新與刪除操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼

    Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼

    這篇文章主要介紹了Spring Boot 實(shí)現(xiàn)Restful webservice服務(wù)端示例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • Springboot啟動(dòng)不檢查JPA的數(shù)據(jù)源配置方式

    Springboot啟動(dòng)不檢查JPA的數(shù)據(jù)源配置方式

    這篇文章主要介紹了Springboot啟動(dòng)不檢查JPA的數(shù)據(jù)源配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

武安市| 墨竹工卡县| 汽车| 温泉县| 鄯善县| 开平市| 西安市| 双江| 舞阳县| 东乡县| 平顶山市| 开化县| 乌兰察布市| 宁安市| 富锦市| 甘肃省| 赫章县| 湘潭市| 曲松县| 大田县| 桃园县| 田林县| 丰镇市| 潮安县| 乐亭县| 蕉岭县| 历史| 内黄县| 墨玉县| 监利县| 宁陕县| 南召县| 绥江县| 托克托县| 玉溪市| 定远县| 鄂温| 德江县| 永仁县| 永登县| 安远县|