Tomcat中的Session,为什么要用外观StandardSessionFacade包起来再传给Servlet呢?
这样是不是更安全,为什么呢?
-------------------------------
求大神们指导
Tomcatsession

解决方案 »

  1.   

    Facade Design简单的说 打个比方main(){
    method1();
    method2();
    }method(){
    method1();
    method2();
    }
    main(){
    method();
    }
    这样设计肯定是也一定是为了简化servlet的对方法的调用
      

  2.   

    外观模式我知道是干嘛的,但是结合到Session,具体是什么呢?
    StandardSessionFacade只是简单的调用Session,这对简化调用没有什么帮助!
      

  3.   

    StandardSessionFacade.java:    /**
         * Construct a new session facade.
         */
        public StandardSessionFacade(StandardSession session) {
            super();
            this.session = (HttpSession) session;
        }
        /**
         * Construct a new session facade.
         */
        public StandardSessionFacade(HttpSession session) {
            super();
            this.session = session;
        } StandardSession.java:    public StandardSession(Manager manager) {        super();
            this.manager = manager;        // Initialize access count
            if (ACTIVITY_CHECK) {
                accessCount = new AtomicInteger();
            }    }
    这里是对构造方法的包装,用Facade包装了StandardSession,因为StandardSession可以有两种方式构造出来,但Servlet应该是只面向HttpSession接口来编码,如下://两种方式都可以构造出实际调用的session对象,通过Facade的两个构造函数来强制Servlet只能调用HttpSession接口的对象
    HttpSession session = new StandardSession(new Manager());
    StandardSession session = new StandardSession(new Manager());
    //在经过StandardSessionFacade转化之后,都转为HttpSession对象
    //下面这行是StandardSessionFacade的一行源码
        /**
         * Wrapped session object.
         */
        private HttpSession session = null;
    调用者是不应该知道有StandardSession的,只需要面向接口即可
      

  4.   


    你看看StandardSession.getSession(), servlet中就是通过这个方法获取session的。
    StandardSessionFacade是StandardSession的一个属性,然后StandardSession返回给servlet自己的属性 来访问自己。  这种逻辑,不是有点抽象嘛?
    而且,StandardSession和StandardSessionFacade都实现了HttpSession接口,就不存在你说的那个情况了!    public HttpSession getSession() {        if (facade == null)
                facade = new StandardSessionFacade(this);
            return (facade);    }