首页 > 代码库 > 监听器

监听器

技术分享
public class UserListener implements HttpSessionBindingListener { // 不需要在web.xml文件中配置监听器
    // 默认的在线人数
    public static int ONLINE_NUM = 0;
    private String name;

    // 在往session中添加数据的时候 会触发的事件
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("进入了 人数+++++++++++++++1");
        ONLINE_NUM++;
    }

    /**
     * 01.session失效   session.invalidate()
     * 02.session超时
     * 03.session清除指定属性得到时候,改变属性的时候
     */
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("进入了 人数-----------------1");
        ONLINE_NUM--;
    }

    // 对应的带参构造方法
    public UserListener(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
创建一个class实现HttpSessionBindingListener接口

实现了HttpSessionBindingListener接口的类 才能被监听,没有实现这个接口的类是无法被监听器监听的!

需要的界面

技术分享
  <body>
    <form action="doMain.jsp" method="post">
       <input  type="text"  name="userName"> 
       <button  type="submit">提交</button>
    </form>
  </body>
登录界面login.jsp
技术分享
  <body>
  
  <%
   String  userName=request.getParameter("userName");
    if(userName==null||userName==""){  //判断用户是否输出数据
        response.sendRedirect("login.jsp");
    }else{   //有值
        UserListener user=new UserListener(userName);
         System.out.println("应该在触发器之前执行的代码..............");
         //触发器开始执行
         session.setAttribute("user", user);
         response.sendRedirect("onLine.jsp");
    }
  %>
  
  </body>
处理请求的界面doMain.jsp
技术分享
  <body>
    <h1>当前在线人数:<%=UserListener.ONLINE_NUM%></h1>
    
    <a href="out.jsp">退出登录</a>
    
  </body>
onLine.jsp页面
技术分享
  <body>
   <%
   session.invalidate();
   response.sendRedirect("onLine.jsp");
   %>
  </body>
退出登录out.jsp

 

监听器