关于 servlet 的一些内容(一)
上一篇 / 下一篇 2008-01-10 18:07:53 / 个人分类:做着
最近做权限,对这些内置对象有了些了解.找些资料收藏起来.
1s3s6uC,J'o Ry Yl7}0servlet 相关的Listener应用
1i5lEV3D0ITPUB个人空间&YY K2J/X
ITPUB个人空间oTn1k;|G4s!\-F
ITPUB个人空间hR?9l5?8qb+p
Dvl
从作用域范围来说,Servlet的作用域有ServletContext,HttpSession,ServletRequest.
k!O(hl/W0
,iH#[sfl6[$N"KV0Context范围:
qS
x[k s/Y{0 ITPUB个人空间~X%A$|3M6|)O
ServletContextListener:ITPUB个人空间j)g7B0Y$Q.r^A
对一个应用进行全局监听.随应用启动而启动,随应用消失而消失主要有两个方法:ITPUB个人空间:Pl8GrX2q+d\6F'w
contextDestroyed(ServletContextEvent event) ITPUB个人空间 VA'bx._:~)rY#hI
在应用关闭的时候调用ITPUB个人空间&`f4[!Ym(}
contextInitialized(ServletContextEvent event) ITPUB个人空间7eA\ZI[O~
在应用启动的时候调用
RD[-RHW1G U0ITPUB个人空间)`S1j&@*Q}#lwS
x
这个监听器主要用于一些随着应用启动而要完成的工作,也就是很多人说的我想在容器
,z3PfHLx0启动的时候干..........
L`lBkmo1AT0一般来说对"全局变量"初始化,如ITPUB个人空间5aMm$V)f |JlLg
public void contextInitialized(ServletContextEvent event){
!^Q$H3qYJ#Up6NE0 ServletContex sc = event.getServletContext();
_Pp$hfwMq'bW Vm0 sc.setAttribute(name,value);ITPUB个人空间X&Mgn E4uL,H
}
\^l0J [E0以后你就可以在任何servlet中getServletContext().getAttribute(name);ITPUB个人空间9e w kn/s*@
我最喜欢用它来做守护性工作,就是在contextInitialized(ServletContextEvent event) ITPUB个人空间2S(j4S
n8zo
方法中实现一个Timer,然后就让应用在每次启动的时候让这个Timer工作:ITPUB个人空间T8fZ;\4M@m!F:B|
public void contextInitialized(ServletContextEvent event){
'\5l2O1b
D(T0 timer = new Timer();
7i-Vjq1A4p9y/_B0 timer.schedule(new TimerTask(){ITPUB个人空间Ns
xWE-K7Lv
public void run(){
AkW6Jy6gD2d'H0 //do any thingsITPUB个人空间;Dz}-gKX3@M
}
*lY-o&Hb@V ix0 },0,时间间隔);ITPUB个人空间 ?VXS'Y8_{
}
i)D;{(AJ"y w|Tb0ITPUB个人空间 A6w8l#kV
有人说Timer只能规定从现在开始的多长时间后,每隔多久做一次事或在什么时间做ITPUB个人空间H|2`9Pi
一次事,那我想在每月1号或每天12点做一项工作如何做呢?ITPUB个人空间-s`/lX@
你只要设一个间隔,然后每次判断一下当时是不是那个时间段就行了啊,比如每月一号做,那你
5D8R{
kbG l0时间间隔设为天,即24小时一个循环,然后在run方法中判断当时日期new Date().getDate()==1
mbW/]7Mh&h)?|\0就行了啊.如果是每天的12点,那你时间间隔设为小时,然后在run中判断new Date().getHour()ITPUB个人空间0r-N2ECf
==12,再做某事就行了.
S5xN+FY+aC0
8rqN
y!^6h(F0ServletContextAttributeListener:
,c'jAtgp7Ui9n(n0
,Z%EFT nX0这个监听器主要监听ServletContex对象在setAttribute()和removeAttribute()的事件,注意ITPUB个人空间1S{(O*N:V'X
也就是一个"全局变量"在被Add(第一次set),replace(对已有的变量重新赋值)和remove的时候.ITPUB个人空间x}
b;q6F"E'qM8tb
分别调用下面三个方法:ITPUB个人空间:jS;G z]'x+n
public void attributeAdded(ServletContextAttributeEvent scab)这个方法不仅可以知道
6wq}yo0SX0哪些全局变量被加进来,而且可获取容器在启动时自动设置了哪些context变量:
X%p\U(v q"M)S7p0ITPUB个人空间NV \
b~R z
public void attributeAdded(ServletContextAttributeEvent scab){
3z*b5X3J ?*g6d^0 System.out.println(scab.getName());
&C:Zi8Ti\-F3u3M0}ITPUB个人空间%s r*M^ k,~
public void attributeRemoved(ServletContextAttributeEvent scab) ITPUB个人空间V2f*z"Eh@ITX
a&e&cC\R"Hn(xI0 public void attributeReplaced(ServletContextAttributeEvent scab) ITPUB个人空间Y&Y~XK5pc
ITPUB个人空间&s9UOS uz
u W7] Ex1@ N0HC0ITPUB个人空间q9i\tl
ITPUB个人空间l8K[2?2]m
ITPUB个人空间7w4j"[$?\1Nz
4H+y*`(U'GU2hP0
%pF"a HC0ITPUB个人空间#k4aI+k!_.R[
ITPUB个人空间8k O3G9SZ I
(mx|5WS7Nnn*T0Session范围:ITPUB个人空间p%C
t)n?w|J3Z
HttpSessionListener: