• Tomcat 学习笔记二


    学习一
      java.bean.PropertyChangeListener用来监听bean类的属性值改变。当改变时同时执行对应事件。而且是线程安全的。tomcat用此reload的Boolean值改变是否要重新加载。

    public class Demo2 implements PropertyChangeListener{
        
        PropertyChangeSupport support = new PropertyChangeSupport(this);
        
        private String name;
        
        public String getName() {
            return name;
        }
        
        public Demo2()
        {
            this.name = "apple";
            addListenProperty(this);
        }
        
        public void setName(String name) {
            String oldName = this.name;
            this.name = name;
            support.firePropertyChange("name", oldName, this.name);
        }
        public void addListenProperty(PropertyChangeListener li)
        {
            support.addPropertyChangeListener(li);
        }
        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            System.out.println("--------------------------------");
            System.out.println(evt.getOldValue());
            System.out.println(evt.getNewValue());
            System.out.println(evt.getPropertyName());
            ((Demo2)evt.getSource()).gotoSchool();
            System.out.println("--------------------------------");
        }
        
        public void gotoSchool()
        {
            System.out.println("welcome to MIT !");
        }
    }

    Test测试类

    public class Demo {
        
        public static void main(String[] args) {
            Demo2 t = new Demo2();
            t.setName("jobs");
            System.out.println("~~~~~~~~~~~~~~~~");
            t.setName("steven");
        }
    }

    测试结果

    --------------------------------
    apple
    jobs
    name
    welcome to MIT !
    --------------------------------
    ~~~~~~~~~~~~~~~~
    --------------------------------
    jobs
    steven
    name
    welcome to MIT !
    --------------------------------

    学习二
      接口Pipeline  流水线功能学习有点类似于过滤器构造。它有一个Value数组。使用 System.arraycopy() 来扩展流水线阀门个数。
      invoke方法传递到下一个。阀门全部通过之后有一个basic方法。就是warpper包装器了。
      这时候开始加载Servlet.class。执行service方法。阀门可以用来HeaderLoggerValve,ClientIPLoggerValve记录日志。

    public interface Pipeline {
    
        public Valve getBasic();
    
        public void setBasic(Valve valve);
    
        public void addValve(Valve valve);
    
        public Valve[] getValves();
    
        public void removeValve(Valve valve);
    
        public Valve getFirst();
    }

      接下来接口Lifecycle,用于控制类的生命周期了。几乎所有的容器都实现了这个类。
      还有loader类。类的加载。动态加载webapp下的class文件。有点复杂有时间在看看。

    附上tomcat各容器之间关系图,多看看,多想想。

    流程图

    Stay Hungry,Stay Foolish!
  • 相关阅读:
    ios app: 使用企业license设置发布app的过程
    gtest测试代码编写思想
    受尽侮辱的语言
    创业者的思维误区---《精益创业》
    session的取代者:Json Web Tokens----在客户端存储登陆状态
    lineman 的理念与 modern web app
    angularjs框架及其生态环境 --待续
    javascript的崛起及其生态元素
    Cassandra 2.x 提示“错误: 代理抛出异常错误: java.lang.NullPointerException”
    cassandra运行出现了Unable to gossip with any seeds,cqlsh链接不上,提示connection refused处理办法
  • 原文地址:https://www.cnblogs.com/stay-9527/p/4014525.html
Copyright © 2020-2023  润新知