Lister

观察者模式
1. 应用于监听器(Listener),XML解析(DOM,SAX),JAVA SWING。
2. 组成:抽象主题角色,抽象观察者角色,具体主题角色,具体观察者角色。
Listener是Servlet的监听器,它可以监听客户端的请求,服务器的操作等。(如监听在线用户的数量)
当增加一个HttpSession时,就激发SessionCreated(HttpSessionEvent se)方法,这样可以给在线人数增加1
常用的监听接口有如下几个:
1. ServletContextAttributeListener监听对ServletContext属性的操作,比如增加,删除,修改属性。
2. ServletContextListener监听ServletContext。当创建ServletContext时,激发ContextInitialized(ServeltContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法
3. HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发sessionCreated(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed(HttpSessionEvent se)方法
4. HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se)方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se)方法。
在线用户数量观察者监听器:

package com.test.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnLineCountListener implements HttpSessionListener,
ServletContextListener, ServletContextAttributeListener {
private int count;

public void sessionCreated(HttpSessionEvent arg0) {
count++;
setContext(arg0);
System.out.println("count数量增加1");
}

public void sessionDestroyed(HttpSessionEvent arg0) {
count--;
setContext(arg0);
System.out.println("count数量减少1");
}

private void setContext(HttpSessionEvent arg){
arg.getSession().getServletContext().setAttribute("online", new Integer(count));
}

public void contextDestroyed(ServletContextEvent arg0) {
log("contextDestroyed()");
}

public void contextInitialized(ServletContextEvent arg0) {
log("contextInitialized()");
}

private void log(String str){
System.out.println("调用了context:"+str);
}

public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("增加了属性:"+arg0.getName()+":"+arg0.getValue());
}

public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("移除了属性:"+arg0.getName()+":"+arg0.getValue());
}

public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("替换了属性:"+arg0.getName()+":"+arg0.getValue());
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值