监听器

监听器存在以下对象

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

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

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

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

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

监听者· 被监听着 监听对象
HttpSessionActivationListener HttpSession – 监听HttpSession活化和顿化。 HttpSessionEvent
HttpSessionAttributeListener HttpSession – 监听session的属性变化的。S.setAttributee(); HttpSessionBindingEvent
HttpSessionBindingListener HttpSession - 监听哪一个对象,绑定到了session上。S.setAtrri(name,User);  
HttpSessionListener HttpSesion – 监听sessioin创建销毁 HttpSessionEvent
ServletContextAttributeListener ServletContext – 属性变化的  
ServletContextListener servletContext 创建销毁  
ServletRequestListener - serlvetRequestAttibuteListner Request -创建销毁  

创建一个监听器:

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      %>
原文地址:https://www.cnblogs.com/liuwt365/p/4136044.html