servlet監(jiān)聽器
在WEB應(yīng)用中響應(yīng)特定對象的特定事件
好處:更方便的控制application,session,request對象的發(fā)生的特定事件
可以集中處理特定的事件
-------------------------------------------------------------------
HttpSession監(jiān)聽器接口
1 HttpSessionListener(需要配web.xml)
2 HttpSessionAttributeListener(需要配web.xml)
3 HttpSessionBindingListener
4 HttpSessionActivationListener(需要配web.xml)
-------------------------------------------------------------------
HttpSessionListener
1 sessionCreated()//當(dāng)session對象產(chǎn)生的時(shí)候調(diào)用的方法
2 sessionDestroyed()//當(dāng)session對象消滅的時(shí)候調(diào)用的方法
web.xml配置
<listener>
<listener-class>webbook.chapter14.CounterListener(對應(yīng)的實(shí)現(xiàn)類)
</listener-class>
</listener>
---------------------------------------------------------------------
HttpSessionAttributeListener
1 attributeAdded()//添加時(shí)調(diào)用
2 attributeReplaced()//替換時(shí)調(diào)用
3 attributeRemoved()//刪除時(shí)調(diào)用
產(chǎn)生事件的代碼
session.setAttribute("username","wangwu");
session.setAttribute("username","lisi");
session.removeAttribute("username");
-----------------------------------------------------------------
HttpSessionBindingListener
1 valueBound();
2 vaoueUnbound();
調(diào)用機(jī)制
如果一個(gè)類實(shí)現(xiàn)了HttpSessionBindingListener接口,則當(dāng)這個(gè)類的對象通過session.setAttribute()被綁定到Session對象中時(shí),
則該對象的valueBound()方法被自動調(diào)用,當(dāng)這個(gè)對象從Session中刪除時(shí)(調(diào)用session.invalidate()和session.removeAtrribute()
方法,或Session對象過期)valueUnbound()方法將被自動調(diào)用.
--------------------------------------------------------------------------------------------------------
HttpSessionActivationListener
1 sessionDidActivate();
2 sessionWillPassivate();
---------------------------------------------------------------------------------
例子:
1 建立CounterListener處理類
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CounterListener implements HttpSessionListener {
private static long onlineNumber=0;
public void sessionCreated(HttpSessionEvent se) {
onlineNumber++;
}
public void sessionDestroyed(HttpSessionEvent se) {
onlineNumber--;
}
public static long getOnlineNumber(){
return onlineNumber;
}
}
2 配置web.xml
<listener>
<listener-class>com.tags.CounterListener</listener-class>
</listener>
3 JSP頁面
<%@page import="com.tags.CounterListener;"%>
<body>
當(dāng)前的在線人數(shù):<%=CounterListener.getOnlineNumber() %> <br>
</body>
----------------------------------------------------------------------------
ServletContext監(jiān)聽器接口
ServletContextListener
1 contextInitialized()
2 contextDestroyed()
調(diào)用機(jī)制
當(dāng)在web應(yīng)用中部署了實(shí)現(xiàn)該接口的實(shí)現(xiàn)類后,在WEB容器加載WEB應(yīng)用時(shí)(如:啟動服務(wù)器)就會自動調(diào)用contextInitialized()方法,
而當(dāng)WEB容器銷毀WEB應(yīng)用時(shí)(如:關(guān)閉服務(wù)器),會自動調(diào)用contextDestroyed()方法.
-----------------------------------------------------------------------------------
ServletContextAttributeListener
1 attributeAdded()
2 attributeReplaced()
3 attributeRemoved()
觸發(fā)事件的代碼
context.setAttribute("counter",new Integer(0));
context.setAttribute("counter",new Integer(100));
context.removeAttribute("counter");
-----------------------------------------------------------
HttpServletRequest監(jiān)聽器
ServletRequestListener
1 requestInitialized();
2 requestDestroyed()
調(diào)用機(jī)制
與ServletContextListener接口類似,在web應(yīng)用中部署實(shí)現(xiàn)該接口的實(shí)現(xiàn)類扣,在HttpServletRequest對象(JSP中的request對象)建立
或者被銷毀時(shí),由web容器自動調(diào)用requestInitialized()或者requestDestroyed()方法.
--------------------------------------------------------------------------------------
ServletRequestAttributeListener
1 attributeAdded();
2 attributeReplaced();
3 attributeRemoved();
觸發(fā)事件的代碼
request.setAttribute("username","lisi");
request.setAttribute("username","wangwu");
request.removeAttribute("username");
******************************************************************
public class ListenerOnline implements HttpSessionLinstener,ServletContext{
private application;
public void sessionCreated(HttpSessionEvent event){
Integer n=(Integer)application.getAttrabute("z",1000);
application.setAttrabute("z",n.IntValue()+1);
}
public void sessionDestroyed(HttpSessionEvent event){
}
public void contextInitialized(ServletContextEvent event){
application=event.getServletContext();
application.setAttrabute("z",1000);
}
public void contextDestroyed(ServletContextEvent event){
}
}
<listener>
<listener-class>com.tags.ListenerOnline</listener-class>
</listener>
<meta http-equiv="refresh" content="3"/>