用HttpSessionListener與HttpSessionBindingListener實現在線人數統計
想了一下在線人數統計方面的實現,上網找了下這方面的知識,最初我的想法是,管理session,如果session銷毀了就減少,如果登陸用戶了就新增一個,但是如果是用戶非法退出,如:未注銷,關閉瀏覽器等,這個用戶的session是管理不到的,最后決定用HttpSessionListener接口或HttpSessionBindingListener接口來實現,通過監聽session的新建和銷毀來控制,詳細如下。先添加登陸的頁面index.jsp

2

3

4

5

6

7

8

9

10

11

12

13

14

點擊登陸后跳轉的login.jsp(為了方便,用jsp做servlet,同學們用的時候記得改過來)

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

登陸成功跳轉到顯示頁面result.jsp

2

3

4

<h3>您好:${username} [<a href="logout.jsp">注銷</a>]</h3> 當前在線用戶: <table> <% List onlineUserList = (List) application.getAttribute("onlineUserList"); for (int i = 0; i < onlineUserList.size(); i++) { String onlineUsername = (String) onlineUserList.get(i); %> <tr> <td><%=onlineUsername%></td> </tr> <% } %> </table>
點擊注銷頁面logout.jsp頁面

2

3

4

5

6

7

8

9

10

11

12

13

14

OK,登陸、查看、注銷頁面都有了,下面開始新建監聽器
1、HttpSessionListener添加類OnlineUserListener,繼承HttpSessionListener,HttpSessionListener中有兩個方法sessionCreated(HttpSessionEvent
event)與sessionDestroyed(HttpSessionEvent ,前者是監聽session的新建,后者是監聽session的銷毀。
OnlineUserListener代碼如下:

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

web.xml配置:

2

3

4

2、HttpSessionBindingListenerHttpSessionBindingListener雖然叫做監聽器,但使用方法與HttpSessionListener完全不同。我們實際看一下它是如何使用的。
新建類OnlineUserBindingListener,實現HttpSessionBindingListener接口,構造方法傳入username參數,HttpSessionBindingListener內有兩個方法valueBound(HttpSessionBindingEvent
event)和valueUnbound(HttpSessionBindingEvent event),前者為數據綁定,后者為取消綁定
所謂對session進行數據綁定,就是調用session.setAttribute()把HttpSessionBindingListener保存進session中。

2

3

4

5

6

7

8

9

10

11

12

13

這就是HttpSessionBindingListener和HttpSessionListener之間的最大區別:HttpSessionListener只需要設置到web.xml中就可以監聽整個應用中的所有session。HttpSessionBindingListener必須實例化后放入某一個session中,才可以進行監聽。
監聽范圍上比較,HttpSessionListener設置一次就可以監聽所有session,HttpSessionBindingListener通常都是一對一的。
正是這種區別成就了HttpSessionBindingListener的優勢,我們可以讓每個listener對應一個username,這樣就不需要每次再去session中讀取username,進一步可以將所有操作在線列表的代碼都移入listener,更容易維護。
HttpSessionBindingListener代碼如下:

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

在login.jsp中做這一步:
b.xml配置:
web.xml配置:
posted on 2011-01-07 19:25 子恩 閱讀(593) 評論(1) 編輯 收藏 所屬分類: javaSE