首页 > 代码库 > 监听器

监听器

监听器存在以下对象

监听者:XxxxxListener - 所的监听者是的接口。

被监听者 :任意对象都可以成为被监听者 - 早已经存在。

监听到的事件:XxxxEvent- 永远是一个具体类,用来放监听到的数据

                            里面都有一个方法叫getSource() – 返回的是监听到对象

 

在Javaweb中存在三个被监听对象:       HttpServletRequest       HttpSessoin       ServletContext

监听者·被监听着监听对象
HttpSessionActivationListenerHttpSession – 监听HttpSession活化和顿化。HttpSessionEvent
HttpSessionAttributeListener HttpSession – 监听session的属性变化的。S.setAttributee();HttpSessionBindingEvent
HttpSessionBindingListenerHttpSession - 监听哪一个对象,绑定到了session上。S.setAtrri(name,User); 
HttpSessionListener HttpSesion – 监听sessioin创建销毁HttpSessionEvent
ServletContextAttributeListenerServletContext – 属性变化的 
ServletContextListenerservletContext 创建销毁 
ServletRequestListener - serlvetRequestAttibuteListnerRequest -创建销毁 

 

创建一个监听器:

1、创建类实现监听者接口

2、在web。xml中注册

1 <listener>2         <listener-class>cn.test.listener.MyLitener</listener-class>3 </listener>

Demo:实现统计在线人数和访问IP

1、MySessionLitener

 1 public class MySessionLitener implements HttpSessionListener { 2     private Integer onLine=1; 3     public void sessionCreated(HttpSessionEvent se) { 4         System.out.println("有人访问了。。。。"); 5         HttpSession h1= se.getSession(); 6         HttpSession h2=(HttpSession) se.getSource(); 7         System.out.println("h1:"+h1.hashCode()); 8         System.out.println("h2:"+h2.hashCode()); 9         ServletContext sc= se.getSession().getServletContext();10         sc.setAttribute("OnLine", onLine++);11         List<HttpSession> list=(List<HttpSession>) sc.getAttribute("sessions");12         if(list==null)13         {14             list=new ArrayList<HttpSession>();15             sc.setAttribute("sessions", list);16         }17         list.add(h2);18     }19 20     public void sessionDestroyed(HttpSessionEvent arg0) {21         System.out.println("有人退出。。。");22         23     }24 25 }

2、IPFilter

 1 public class IPFilter implements Filter{ 2  3     public void destroy() { 4          5     } 6  7     public void doFilter(ServletRequest request, ServletResponse response, 8             FilterChain chain) throws IOException, ServletException { 9         HttpServletRequest req=(HttpServletRequest) request;10         if(req.getAttribute("IP")==null)11         {12             req.getSession().setAttribute("IP", req.getRemoteAddr());13         }14         chain.doFilter(req, response);15     }16 17     public void init(FilterConfig filterConfig) throws ServletException {18 19     }20     21 }

3、jsp页面

1  在线人数:${OnLine }<br/>2     访问IP:<br/>3     <%4     List<HttpSession> list=(List<HttpSession>)application.getAttribute("sessions");5     for(HttpSession s:list)6     {7         out.println(s.getAttribute("IP")+"<br/>");8     }9      %>

 

监听器