监听器Listener

1、监听器

实现一个监听器的接口;(有很多种)
监听器主要使用与GUI编程中,web开发一般应用于统计在线人数

1.1、监听器开发

统计网站在线人数

1、编写一个类,实现监听器的接口

 public class OnlineCountListener implements HttpSessionListener {
 //创建session监听
 //一旦创建session就会触发一次这个事件
 @Override
 public void sessionCreated(HttpSessionEvent httpSessionEvent) {
     //获取servletContext对象
     ServletContext ctx = httpSessionEvent.getSession().getServletContext();
     Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");
     if (onlineCount == null){
         onlineCount = new Integer(1);
     }else {
         int count = onlineCount.intValue();
         onlineCount = new Integer(count + 1);
     }
     ctx.setAttribute("onlineCount",onlineCount);
 }
 //销毁session监听
 //一旦销毁seesion就会触发一次这个事件
 @Override
 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
     ServletContext ctx = httpSessionEvent.getSession().getServletContext();
     Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");
     if (onlineCount == null){
         onlineCount = new Integer(0);
     }else {
         int count = onlineCount.intValue();
         onlineCount = new Integer(count - 1);
     }
     ctx.setAttribute("onlineCount",onlineCount);
 }
}

2、在web.xml中注册监听器

 <listener>
     <listener-class>com.jialidun.listener.OnlineCountListener</listener-class>
 </listener>

过滤器实现登录验证,注销后不能进入主页

监听器Listener

2、Listener的定义与作用

监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。

3、Listener的分类与使用

主要有以下三类:

1、ServletContext监听
ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。

public void contextInitialized(ServletContextEvent sce);//上下文初始化
public void contextDestroyed(ServletContextEvent sce);//上下文销毁

public ServletContext getServletContext();//ServletContextEvent事件:取得一个ServletContext(application)对象

ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。

public void attributeAdded(ServletContextAttributeEvent scab);//增加属性
public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除
public void attributeRepalced(ServletContextAttributeEvent scab);//属性替换(第二次设置同一属性)

//ServletContextAttributeEvent事件:能取得设置属性的名称与内容
public String getName();//得到属性名称
public Object getValue();//取得属性的值

2、Session监听
Session属于http协议下的内容,接口位于javax.servlet.http.*包下。
HttpSessionListener接口:对Session的整体状态的监听。

public void sessionCreated(HttpSessionEvent se);//session创建
public void sessionDestroyed(HttpSessionEvent se);//session销毁

//HttpSessionEvent事件:
public HttpSession getSession();//取得当前操作的session

HttpSessionAttributeListener接口:对session的属性监听。

public void attributeAdded(HttpSessionBindingEvent se);//增加属性
public void attributeRemoved(HttpSessionBindingEvent se);//删除属性
public void attributeReplaced(HttpSessionBindingEvent se);//替换属性

//HttpSessionBindingEvent事件:
public String getName();//取得属性的名称
public Object getValue();//取得属性的值
public HttpSession getSession();//取得当前的session

session的销毁有两种情况:
(1)session超时,web.xml配置:

<session-config>
    <session-timeout>120</session-timeout><!--session120分钟后超时销毁-->
</session-config>

(2)手工使session失效

public void invalidate();//使session失效方法。session.invalidate();

3、Request监听
 ServletRequestListener:用于对Request请求进行监听(创建、销毁)。

public void requestInitialized(ServletRequestEvent sre);//request初始化
public void requestDestroyed(ServletRequestEvent sre);//request销毁

//ServletRequestEvent事件:
public ServletRequest getServletRequest();//取得一个ServletRequest对象
public ServletContext getServletContext();//取得一个ServletContext(application)对象

ServletRequestAttributeListener:对Request属性的监听(增删改属性)。

public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性
public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除
public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换(第二次设置同一属性)

//ServletRequestAttributeEvent事件:能取得设置属性的名称与内容
public String getName();//得到属性名称
public Object getValue();//取得属性的值

4、在web.xml中配置
Listener配置信息必须在Filter和Servlet配置之前,Listener的初始化(ServletContentListener初始化)比Servlet和Filter都优先,而销毁比Servlet和Filter都慢。

<listener>
    <listener-class>com.listener.class</listener-class>
</listener>
上一篇:I/O复用


下一篇:只做预览页面时,禁止鼠标点击事件