Login的时候,把User和这个BindingNotofy目的的类都加入到session中去。logout的时候,就要主动在activeSessions这个vector中删去这个session。
7 ]" M2 M5 b* j4 E' q
o* \4 L" `# L0 ~ a+ M' W6 J( h我爱电脑技术论坛
( h4 P/ @+ _- a7 wwww.520diannao.com
0 F7 e. k; C: \) ?7 A8 p& owww.520diannao.compublic void logout() 我爱电脑技术论坛! Y* ~; s) P+ Z9 _$ v8 r, L
www.520diannao.com5 t7 ?6 ]* M9 r. ?
throws SQLException,ACLException
4 Q. ?* I7 d- N4 V$ m1 y- K( s; j打造最好的电脑自学交流论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台1 X2 [! V. r4 n' C9 b7 b
{ www.520diannao.com+ P# O; w1 { V
# T6 f- j! E: Z$ n3 P电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 if (this.user == null && this.session.getAttribute("user")==null)
7 i5 q. C- A7 e$ g3 B1 ^: c5 g我爱电脑技术社区--打造最好的电脑技术自学交流平台打造最好的电脑自学交流论坛9 D$ }. Q/ k {" ?
{ 我爱电脑技术论坛- S" y3 ^. Z6 Z( E! O S
打造最好的电脑自学交流论坛# ^ G! b, A# p8 W `% n% {
return; ! I7 O, P5 L& w* X; x% S8 Q
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! i: j1 l0 C6 I" h7 Q4 ]( d
}
2 ~) \# ^7 T V- L. \8 l) Gwww.520diannao.com打造最好的电脑自学交流论坛1 y8 f$ }8 C* T8 O
- e8 q1 X4 v& P- j! } Vector activeSessions = (Vector) this.application.getAttribute("activeSessions");
. |1 A# v! ?5 d- F1 Z电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
& y) t2 [, x! k* A打造最好的电脑自学交流论坛 if (activeSessions != null) 打造最好的电脑自学交流论坛+ E. D @% \: g
" D( `6 h% ~6 x+ z* e1 r电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 {
- v" t; @1 ]# \$ D* d电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
% p, z O7 H- }1 k1 v; Owww.520diannao.comactiveSessions.remove(this.session);
~; ^+ O0 l. b. T1 j5 B打造最好的电脑自学交流论坛
! G4 a, |2 q1 J; u电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站application.setAttribute("activeSessions",activeSessions); 打造最好的电脑自学交流论坛$ u9 J* l. `' b3 M$ J
我爱电脑技术社区--打造最好的电脑技术自学交流平台, w4 L& C4 n( F o2 ` w
}
& p) R& f% J* V& N, w+ L0 q6 `2 S) X3 v) f我爱电脑技术社区--打造最好的电脑技术自学交流平台电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站# J' @7 ?; y+ P4 v, n3 y0 B' ~1 t+ K
我爱电脑技术社区--打造最好的电脑技术自学交流平台 t, V% x( ~: A8 ?, E
java.util.Enumeration e = this.session.getAttributeNames(); 4 v! D3 c; V8 j' I; i9 z( e
我爱电脑技术论坛6 B, ]; e" ]6 u; x+ r
; m9 B% w# A$ a0 E% \4 T我爱电脑技术论坛 while (e.hasMoreElements()) - K2 r2 `7 x0 q3 Q& p9 O' u( Q7 O. G1 j( e
9 q; f: E- M0 m4 o { www.520diannao.com/ {- a2 j3 P" g1 x3 C8 H: l) T
我爱电脑技术论坛$ p+ W# B& w# @9 f& W; w3 r
String s = (String)e.nextElement();
! C+ A/ ~9 w8 q5 h7 ~) s我爱电脑技术论坛
- |* }! U7 l- i% W! m- M我爱电脑技术论坛this.session.removeAttribute(s); : o7 Z+ i0 [, [! c, @3 n
我爱电脑技术社区--打造最好的电脑技术自学交流平台: G: J9 f: z; P$ o& h
}
3 i- ` M( G/ l7 y& H: Y我爱电脑技术社区--打造最好的电脑技术自学交流平台我爱电脑技术论坛" C' t+ A) \$ d r3 E3 K
this.user.touchLogoutTime(); / o [) U6 [7 j' x7 X4 K, e) h2 n
+ T; v. K4 r& g打造最好的电脑自学交流论坛 this.user = null; 6 v: Z* K: r+ }
打造最好的电脑自学交流论坛9 Q8 n" s/ p5 Y0 K, K7 u1 Y
}
* ~% Z: Q" k6 ~2 j6 _ 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站: w# G9 E2 [" _, B9 k
& ^, \# U/ I# w6 z( Cwww.520diannao.comwww.520diannao.com6 T& ?) `- ]6 n5 Y
这两个函数位于一个HttpSessionManager类中.这个类引用了jsp里面的application全局对象。这个类的其他代码和本文无关且相当长,我就不贴出来了。
# q1 u' K ?" L1 Z+ |我爱电脑技术论坛
* ~9 b% L0 D/ | [: o7 \% f9 S打造最好的电脑自学交流论坛
! Z: D( G) o; h1 ]+ t; G我爱电脑技术社区--打造最好的电脑技术自学交流平台下面来看看JSP里面怎么用。
, k2 N; u" l" l) S2 F( n! J+ q8 B我爱电脑技术社区--打造最好的电脑技术自学交流平台
/ {( u6 V5 x* @3 c. }我爱电脑技术社区--打造最好的电脑技术自学交流平台
# W( ]% X: X, L3 |2 M假设一个登录用的表单被提交到doLogin.jsp, 表单中包含UserName和password域。节选部分片段: 我爱电脑技术论坛9 V' {4 I: n# H: X7 F
) N0 r8 l: z# i, A我爱电脑技术社区--打造最好的电脑技术自学交流平台5 j: X8 z9 o2 g8 n& S- l7 G1 o
]7 J4 X" o) Z# S& Q$ w6 @
<%
8 \9 p+ d( d. [1 P6 q打造最好的电脑自学交流论坛电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站6 n3 e: f! d& b0 L( X4 h8 ]( S
HttpSessionManager hsm = new HttpSessionManager(application,request,response); www.520diannao.com4 @/ P, M* o; I. |" |
我爱电脑技术社区--打造最好的电脑技术自学交流平台+ C) Y9 o6 w v7 a' @
try
5 t7 O0 o7 p2 {8 o7 S5 N* I电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站0 V0 i+ R1 s9 E
{
4 M A& V( u P8 P' y% Y: R+ w6 x
8 C! L9 D3 s/ y9 t- B ywww.520diannao.com hsm.login();
2 K8 Y6 S k2 v. X6 ]. s
6 a0 h A$ k' a$ X打造最好的电脑自学交流论坛} www.520diannao.com% b7 A* T% L1 y9 l l
8 O3 T [; n& T' c& y" c我爱电脑技术社区--打造最好的电脑技术自学交流平台catch ( UserNotFoundException e)
0 X; x, P# @: z- H8 d7 k6 A% s
+ w# \- P1 C6 {$ C电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站{ 打造最好的电脑自学交流论坛; O2 m6 o Y0 p3 t
~2 ~: I3 C5 Z% ^' H
response.sendRedirect("InsufficientPrivilege.jsp?detail=User%20does%20not%20exist."); 我爱电脑技术社区--打造最好的电脑技术自学交流平台) D4 G/ ?# l) ~ Z+ \6 R, R
" H8 S4 l& s9 Z* a, Y- O J7 g2 \! }电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 return; 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 V/ A* h% m' f9 b
$ c' N& L. y8 d3 h) Z电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站} 7 |7 ^, w. V9 w! E. c" g0 z
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站* K$ t2 u1 I+ @
catch ( InvalidPasswordException e2)
1 l z/ x6 Z4 [2 \! z打造最好的电脑自学交流论坛www.520diannao.com: W2 T7 m9 e8 \. ^* r
{
! _# c, E% q1 ^* X2 D$ J- E% w我爱电脑技术社区--打造最好的电脑技术自学交流平台我爱电脑技术社区--打造最好的电脑技术自学交流平台 I" B3 l% k+ E* _, F( d) Z- M
response.sendRedirect("InsufficientPrivilege.jsp?detail=Invalid%20Password");
. |' i s% x4 Y8 m0 }我爱电脑技术论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台- y& X- c) u7 q v
return;
( c3 C" @0 o% a* ~: V打造最好的电脑自学交流论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台* g3 {7 _9 ]9 x" r" i
} 我爱电脑技术社区--打造最好的电脑技术自学交流平台( O, Z; ?0 b5 I0 `+ k7 }/ ?8 I; u
我爱电脑技术论坛' f" U. _* A8 e. C# e3 x! V9 U: ]
catch ( Exception e3) 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站+ J! |& ]4 K+ k
1 S4 X& ~* e! x1 G/ U3 B7 l我爱电脑技术论坛{ www.520diannao.com9 ]' Q( n6 x* h5 ~
/ |5 Z: V" j; [+ B2 Z, w电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 %> Error:<%=e3.toString() %><br> 我爱电脑技术社区--打造最好的电脑技术自学交流平台* P* d9 y/ w) G& C( H( v7 Q
* ]4 D1 {) D/ Q9 ?打造最好的电脑自学交流论坛 Press <a href="login.jsp">Here</a> to relogin.
$ y9 r) H6 v4 Q. o- R6 D" W/ Q我爱电脑技术社区--打造最好的电脑技术自学交流平台
; i9 U; @+ f( z5 g; Z+ `1 H* K <% return;
( I7 Y" U& D0 g9 _, ]" b我爱电脑技术社区--打造最好的电脑技术自学交流平台电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站0 @8 _. Q% l9 C, g# a3 E
}
$ \1 m% T: C( d3 _: W) r
7 E) p3 E5 _7 _+ r4 w W% @我爱电脑技术社区--打造最好的电脑技术自学交流平台response.sendRedirect("index.jsp");
+ C9 h2 D* W- k' n我爱电脑技术论坛www.520diannao.com1 k9 |0 P3 B% i" ^" M
%>
2 G% ~6 a+ P# ]: p我爱电脑技术社区--打造最好的电脑技术自学交流平台 我爱电脑技术论坛+ n# g, c. l, Y
打造最好的电脑自学交流论坛& ~) k2 s a2 O/ B& r* X
我爱电脑技术社区--打造最好的电脑技术自学交流平台6 t+ E5 t- _- C0 M* p% X
再来看看现在我们怎么得到一个当前在线的用户列表。
: a6 f( G5 m3 `) c3 I打造最好的电脑自学交流论坛打造最好的电脑自学交流论坛+ l4 a, S0 n V6 |5 H; q
* i6 c3 X0 u# q- s
& G9 f' n# j$ W9 n: C电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站<body bgcolor="#FFFFFF">
2 @9 S/ J5 W- n& G+ M电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
$ x" Y( d0 J' F* G我爱电脑技术论坛<table cellspacing="0" cellpadding="0" width="100%"> 打造最好的电脑自学交流论坛, A I; T% u- r: Y/ I: K! A& ]& {
* p. o# t$ I4 d' ]1 S6 v# b打造最好的电脑自学交流论坛我爱电脑技术社区--打造最好的电脑技术自学交流平台; t2 m* o) J8 c9 c2 | |+ S0 X
<tr > 我爱电脑技术社区--打造最好的电脑技术自学交流平台9 k! ^/ B( p* e, u
我爱电脑技术论坛2 ?8 g# D3 ?! s9 N" P( b% g- V
<td style="width:24px">SessionId www.520diannao.com" H! V) s3 F7 P F2 P
& T1 A( ]/ s0 R5 U: x( [ n. C我爱电脑技术社区--打造最好的电脑技术自学交流平台</td>
3 w' W' z9 L! {/ s6 @我爱电脑技术社区--打造最好的电脑技术自学交流平台www.520diannao.com! X# m" q8 D. T8 g3 g0 J* j5 X; h
<td style="width:80px" >User 打造最好的电脑自学交流论坛: S- F/ w9 m" ]6 y5 {; E: z
+ D- B" d/ A2 x, K+ F- \电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站</td> 我爱电脑技术社区--打造最好的电脑技术自学交流平台4 I4 z: y8 P* Q) `! V9 B5 x
www.520diannao.com. k" I" X; `$ e$ V
<td style="width:80px" >Login Time 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 w) Z4 w; [$ E) ]. ^( p
1 m, Z" R, H: V3 a, g+ M. K
</td>
$ K ^2 F$ ^0 n6 X9 v打造最好的电脑自学交流论坛
& l/ P8 g! T0 J+ ^<td style="width:80px" >Last Access Time
# N- b" Q6 e' e: n5 J电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
$ V" g, j' T8 n3 d* S g$ \# f1 Z) z我爱电脑技术论坛</td>
, X- i C- Q# I' K& |4 m' F1 awww.520diannao.com
W$ v% h; n; P4 l/ s4 B$ t p我爱电脑技术社区--打造最好的电脑技术自学交流平台</tr> 我爱电脑技术社区--打造最好的电脑技术自学交流平台* h5 p2 I) U3 {4 F
5 S* |% J+ @! d<% . Q! \+ E( p5 E( k! `1 j2 P# @
打造最好的电脑自学交流论坛/ C* H, D1 L! j# P |% b
Vector activeSessions = (Vector) application.getAttribute("activeSessions");
$ W5 m/ ^, f9 I7 k- n4 e" `) g
: p9 R% W) t7 D3 L2 G& c) g- G% K电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站if (activeSessions == null) 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站5 t% n i9 F' O1 I* M- v7 B
5 _2 i6 B( u- A8 _电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站{
+ a5 o% p- s7 e我爱电脑技术论坛
; R9 S7 M9 Z4 l7 Z6 s7 ]: T6 swww.520diannao.com activeSessions = new Vector(); 我爱电脑技术论坛5 o* L; ]: c; ?7 P8 y9 j
我爱电脑技术论坛( |; B5 m9 L" F$ y
application.setAttribute("activeSessions",activeSessions);
. r# p8 q; q! S电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
! m6 [9 C" ^! P' K# o _我爱电脑技术社区--打造最好的电脑技术自学交流平台} 我爱电脑技术社区--打造最好的电脑技术自学交流平台6 {& x! U/ H2 U6 x1 [. C8 `5 G% J
( Q6 [4 `5 \ b3 u我爱电脑技术社区--打造最好的电脑技术自学交流平台
* O* M- ^; H( S我爱电脑技术论坛Iterator it = activeSessions.iterator();
1 i3 S1 z C1 \" D- p! k4 @) Dwww.520diannao.com
8 @9 p, H4 k: i+ G7 a7 Y! Q打造最好的电脑自学交流论坛while (it.hasNext()) www.520diannao.com- B8 L8 L* c- X! G9 \
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站, ]! K) F9 ], Z+ B
{ www.520diannao.com" `4 H- r: p3 t& [
www.520diannao.com1 a$ ^4 Q1 O) L+ [; g9 c. t
HttpSession sess = (HttpSession)it.next(); www.520diannao.com! }; c5 S6 g+ D7 U
F2 a9 G3 O6 G0 k( L/ X我爱电脑技术社区--打造最好的电脑技术自学交流平台 JDBCUser sessionUser = (JDBCUser)sess.getAttribute("user"); 我爱电脑技术论坛0 {1 S4 n; z8 B/ q9 t( O! @
3 G. @8 g" j1 }, ]1 Y7 a; V& n% Qwww.520diannao.com String userId = (sessionUser!=null)?sessionUser.getUserID():"None"; 打造最好的电脑自学交流论坛6 R6 A- Q% I- S0 H
+ g; ] c' @+ [电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站%> www.520diannao.com6 I4 R/ i% r) n: Z
我爱电脑技术社区--打造最好的电脑技术自学交流平台# r( A3 s5 d. o* W
<tr>
0 T, t1 v( \$ e- m) Y+ u% i; F# I打造最好的电脑自学交流论坛
; E5 n! K. i* Y<td nowrap=''><%= sess.getId() %></td>
/ \; H* u9 {+ N9 y1 g. z8 u我爱电脑技术社区--打造最好的电脑技术自学交流平台
& L5 u, [( C2 n电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站<td nowrap=''><%= userId %></td> 我爱电脑技术论坛2 P1 I1 F2 k. L; x1 [
. I* q4 i+ Q' y0 X9 p) L- Kwww.520diannao.com<td nowrap=''>
8 H) o( d* g; j5 E" I/ }' {: cwww.520diannao.com打造最好的电脑自学交流论坛7 x( r! Q6 A: ^/ a8 X
<%= BeaconDate.getInstance( new Java.util.Date(sess.getCreationTime())).打造最好的电脑自学交流论坛) Z6 t: I b& ~+ v" V
getDateTimeString()%></td>
8 `" k: P3 Q/ L* k+ p! Ewww.520diannao.com
! }7 k6 R1 u/ y: z) s打造最好的电脑自学交流论坛<td class="<%= stl %>3" nowrap=''>
" i; Y5 |. d" D& | [; `www.520diannao.com我爱电脑技术论坛/ v* |' j3 \: _! s
<%= BeaconDate.getInstance( new java.util.Date(sess.getLastAccessedTime())).
: {7 [1 b7 V3 ?8 I+ {& X我爱电脑技术社区--打造最好的电脑技术自学交流平台getDateTimeString()%></td>
/ I g) A2 c% s1 [. L1 S& _8 J3 Twww.520diannao.com
0 d6 y! G1 m* d8 T打造最好的电脑自学交流论坛</tr> 4 D# u8 {% f# c+ u0 a9 E, n
& b* X7 Y7 V7 M/ Y, Z
<% 5 E" N+ |) C. ^0 G, g7 i
7 i/ t0 ~/ X# c* R! z打造最好的电脑自学交流论坛} X! V, _% a" v, }9 H& |
我爱电脑技术论坛2 z8 [1 p, Q7 H) H: K1 v. ] L
%>
# C! N3 a4 c2 p2 t/ l打造最好的电脑自学交流论坛我爱电脑技术论坛" `, M5 V! R+ n
</table> 我爱电脑技术社区--打造最好的电脑技术自学交流平台1 ^/ e4 q" }: ] P# @) Q! k$ [
+ ?: w7 v! F) v4 V2 e* i# ~1 k打造最好的电脑自学交流论坛</body>
4 E6 ?/ {" J4 V6 `电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 www.520diannao.com) Q" m" M* h. B& c5 c/ p k
www.520diannao.com0 J4 N+ X, x: W3 t+ y
% i8 ^* M% Q4 c1 B4 _ @& B以上的代码从application中取出activeSessions,并且显示出具体的时间。其中BeaconDate类假设为格式化时间的类。
|* ?0 T3 s8 K# s7 P我爱电脑技术社区--打造最好的电脑技术自学交流平台
3 h5 Y. ^3 p# @: M. Q打造最好的电脑自学交流论坛
% h2 C# B/ E' w: N) a, G K这样,我们得到了一个察看在线用户的列表的框架。至于在线用户列表分页等功能,与本文无关,不予讨论。 www.520diannao.com# V6 e& M3 W$ j
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' o8 J+ S; r) e
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站, L6 d+ a. `) q! I* |2 L1 d* v* C! s
这是一个非刷新模型的例子,依赖于session的超时机制。我的同事sonymusic指出很多时候由于各个厂商思想的不同,这有可能是不可信赖的。考虑到这种需求,需要在每个叶面刷新的时候都判断当前用户距离上次使用的时间是否超过某一个预定时间值。这实质上就是自己实现session超时。如果需要实现刷新模型,就必须使用这种每个叶面进行刷新判断的方法。