在Javaweb中存在三個(gè)被監(jiān)聽對象:
HttpServletRequest
HttpSessoin
ServletContext
監(jiān)聽者 | 被監(jiān)聽者 | 監(jiān)聽到事件對象 |
HttpsessionActivationListener | HttpSession – 監(jiān)聽HttpSession活化和頓化。 | HttpSessionEvent |
HttpSessionAttributeListener[W1] | HttpSession – 監(jiān)聽session的屬性變化的。S.setAttributee(); | HttpSessionBindingEvent |
HttpSessionBindingListener | HttpSession - 監(jiān)聽哪一個(gè)對象,綁定到了session上。S.setAtrri(name,User); | |
HttpSessionListener[W2] | HttpSesion – 監(jiān)聽sessioin創(chuàng)建銷毀 | HttpSessionEvent |
ServletContextAttributeListener | ServletContext – 屬性變化的 | |
ServletContextListener | servletContext 創(chuàng)建銷毀 | |
ServletRequestListener - serlvetRequestAttibuteListner | Rrequest -創(chuàng)建銷毀 |
第一步:實(shí)現(xiàn)一個(gè)類:
package cn.hx.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class RequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent sre) {
System.err. Object o = sre.getSource(); System.err.println("這個(gè)o is :"+o);//apache.RequestFaced@22222 } public void requestInitialized(ServletRequestEvent sre) { System.err.println("request創(chuàng)建了:"); Object o = sre.getSource(); System.err.println("這個(gè)o是 :"+o);//apache.RequestFaced@22222 } } 第二步:必須要配置到web.xml <listener> <listener-class>cn.itcast.listener.RequestListener</listener-class> </listener> 說明: 1:配置一個(gè)Listener只要求提供類名就可以了。 2:在tomcat啟動時(shí),會自動的初始化這個(gè)監(jiān)聽器類。 3:tomcat創(chuàng)建的Listner,Serlvet,Filter都是單列的. 在線人數(shù) 只要有人訪問本站點(diǎn),成功創(chuàng)建一個(gè)Session就是一個(gè)會話,一個(gè)會話就是一個(gè)在線人數(shù)。 用HttpSSessionListener來監(jiān)聽Session的創(chuàng)建。 第一步: package cn.hx.listener; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * 以下實(shí)現(xiàn)在線人數(shù)的統(tǒng)計(jì) */ public class MySessionListener implements HttpSessionListener { private Integer online=1; //request.getSession(); public void sessionCreated(HttpSessionEvent se) { System.err.println("有人訪問本網(wǎng)點(diǎn)了"); HttpSession hs1 = (HttpSession) se.getSource(); HttpSession hs2 = se.getSession(); System.err.println("hs1:"+hs1.getId()+","+hs2.getId()+", //獲取整個(gè)域的對象 ServletContext sc= se.getSession().getServletContext(); sc.setAttribute("online",online++); //將所有session放到servletContext //先從application獲取所有已經(jīng)維護(hù)的sesison List<HttpSession> list = (List<HttpSession>) sc.getAttribute("sessions"); if(list==null){//第一個(gè)訪問的人 list = new ArrayList<HttpSession>(); sc.setAttribute("sessions", list); } list.add(hs2); } //過期(30),s.invalidate(); public void sessionDestroyed(HttpSessionEvent se) { System.err.println("有人退出了..."+se.getSession().getId()); ServletContext sc= se.getSession().getServletContext(); sc.setAttribute("online",online--); } }
新聞熱點(diǎn)
疑難解答
圖片精選