首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

servlet-api跟tomcat中的观察者模式、门面模式、模版方法模式

2012-07-01 
servlet-api和tomcat中的观察者模式、门面模式、模版方法模式Servlet-api.jar定义了如下对象抽象类HttpServl

servlet-api和tomcat中的观察者模式、门面模式、模版方法模式
Servlet-api.jar定义了如下对象
抽象类HttpServlet中使用了模版方法service(定义了HttpServlet处理的总流程和框架),并提供7个doXXX子方法的默认实现,具体的Servlet只需要继承HttpServlet并替换相应的do方法来完成自己的业务逻辑即可。

HttpSession:所有Http协议的Session都需要实现的方法

package javax.servlet.http;public abstract interface HttpSession


EventObject:所有事件状态对象都将从其派生的根类。 所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event 的对象。
public class EventObjectextends Objectimplements Serializable


HttpSessionEvent:HttpSession定义的事件,其souce是HttpSession
package javax.servlet.http;import java.util.EventObject;public class HttpSessionEvent extends EventObject{  public HttpSessionEvent(HttpSession source)  {    super(source);  }  public HttpSession getSession() {    return ((HttpSession)super.getSource());  }}


EventListener:所有事件监听器接口必须扩展的标记接口。
public interface EventListener


HttpSessionListener:HttpSession对应的事件监听接口,明确定义了需要监听的事件sessionCreated和sessionDestroyed
package javax.servlet.http;import java.util.EventListener;public abstract interface HttpSessionListener extends EventListener{  public abstract void sessionCreated(HttpSessionEvent paramHttpSessionEvent);  public abstract void sessionDestroyed(HttpSessionEvent paramHttpSessionEvent);}


在tomcat的catalina.jar中,tomcat容器实现的HttpSession类为StandardSession。
StandardSession实现类中,实现了定义了下述属性和方法:
protected transient ArrayList listeners = new ArrayList();:事件监听程序的集合
addSessionListener(SessionListener):添加Session事件监听程序
  public void addSessionListener(SessionListener listener)  {    this.listeners.add(listener);  }

fireSessionEvent(String, Object):触发所有事件监听程序的集合中的事件
  public void fireSessionEvent(String type, Object data)  {    if (this.listeners.size() < 1)      return;    SessionEvent event = new SessionEvent(this, type, data);    SessionListener[] list = new SessionListener[0];    synchronized (this.listeners) {      list = (SessionListener[])(SessionListener[])this.listeners.toArray(list);    }    for (int i = 0; i < list.length; ++i)      list[i].sessionEvent(event);  }

removeSessionListener(SessionListener):移除Session事件监听程序
  public void removeSessionListener(SessionListener listener)  {    this.listeners.remove(listener);  }

tellNew:调用fireSessionEvent的地方
  public void tellNew()  {    fireSessionEvent("createSession", null);    ....  }

public class org.apache.catalina.session.StandardSession implements javax.servlet.http.HttpSession, org.apache.catalina.Session, java.io.Serializable


StandardSessionFacade:和StandardSession 实现了相同的接口HttpSession,在构造函数中把StandardSession的实例传递进来,它只曝露servlet规范中定义的HttpSession中需要实现的方法,其他的方法比如addSessionListener等不需要曝露出去(Facade)
public class org.apache.catalina.session.StandardSessionFacade implements javax.servlet.http.HttpSession


参考:关于观察者模式的问题

热点排行