java web监听器统计在线用户及人数

2025-05-29 0 34

在线用户使用HttpSessionListener监听器统计

每当一个session会话建立 在线用户人数+1

每当一个session会话销毁 在线用户人数-1

使用ServletRequestListener监听器统计用户信息

每当一个request建立 将当前用户放入集合

每当session会话销毁 将当前用户移出集合

我使用的是Servlet3.0 监听器直接使用注解@webListener即可 不用在web.xml中布局

在web.xml中配置session-timeout标签 标志session过期时间为1分钟 0为不过期

?

1

2

3
<session-config>

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

</session-config>

servlet3.0使用条件

java web监听器统计在线用户及人数

运行结果:

java web监听器统计在线用户及人数

由于session对话关闭时间并不一定以设置的1分钟为准 所以 gif图像中最后等待时间较长

User 实体类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34
package com.scx.entity;

/**

* 用户实体类

*

*/

public class User {

//当前用户的session id

private 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监听器

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39
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 监听器

*

*/

@WebListener

public class MyHttpSessionListener implements HttpSessionListener{

//当前用户数

private int userCounts=0;

@Override

public void sessionCreated(HttpSessionEvent se) {

//sessionCreated 用户数+1

userCounts++;

//重新在servletContext中保存userCounts

se.getSession().getServletContext().setAttribute("userCounts", userCounts);

}

@Override

public void sessionDestroyed(HttpSessionEvent se) {

//sessionDestroyed 用户数-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();

//如果当前用户在userList中 在session销毁时 将当前用户移出userList

if(SessionUtil.getUserBySessionId(userList, sessionId)!=null){

userList.remove(SessionUtil.getUserBySessionId(userList, sessionId));

}

//将userList集合 重新保存到servletContext

se.getSession().getServletContext().setAttribute("userList", userList);

}

}

ServletRequestListener监听器

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47
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 监听器

*

*/

@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对象 初始化userList

if(userList==null){

userList=new ArrayList<User>();

}

HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest();

//sessionId

String 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集合 保存到ServletContext

arg0.getServletContext().setAttribute("userList", userList);

}

}

工具类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
package com.scx.util;

import java.util.ArrayList;

import com.scx.entity.User;

public class SessionUtil {

//根据sessionId判断当前用户是否存在在集合中 如果存在 返回当前用户 否则返回null

public static User getUserBySessionId(ArrayList<User> userList,String sessionId) {

for (User user : userList) {

if(sessionId.equals(user.getSessionId())){

return user;

}

}

return null;

}

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持快网idc!

原文链接:http://blog.csdn.net/su20145104009/article/details/53217201

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java web监听器统计在线用户及人数 https://www.kuaiidc.com/117297.html

相关文章

发表评论
暂无评论