当前位置: 首页 > 科技观察

由于大家对启动过程了解不多,那么大家知道Tomcat的生命周期是什么样子的吗?

时间:2023-03-21 15:33:34 科技观察

本文转载自微信公众号《Java极客技术》,作者鸭血范。转载本文请联系Java极客技术公众号。对于Tomcat的生命周期管理,我们不能总是从书本上获取知识,而是要结合实践,然后综合书中的内容,逐层深入分析,这样才能更好的记住和掌握了解我们自己。彻底。启动的时候找一个zip版的Tomcat,直接启动就可以了。让我们看看它长什么样。2021年1月11日上午10:16:24org.apache.coyote.AbstractProtocolinit信息:InitializingProtocolHandler[“http-bio-8080”]2021年1月11日上午10:16:24org.apache.coyote.AbstractProtocolinit信息:InitializingProtocolHandler[“ajp-bio-8009”]2021年1月11日上午10:16:24org.apache。catalina.startup.Catalinaload信息:初始化处理时间为470毫秒,2021年1月11日上午10:16:24StandardEnginestartInternalINFO:StartingServletEngine:ApacheTomcat/7.0.88January11,202110:16:24AMorg.apache.catalina.startup.HostConfigdeployDirectory看到这个启动过程,想想上一篇文章中的Tomcat启动过程吧?又是那种感觉,加载,然后启动,最后停止。重点1:Lifecycle在上一篇文章中,我们提到了Lifecycle,Tomcat通过Lifecycle接口统一管理生命周期。所有具有生命周期的组件都必须实现Lifecycle接口,以便提供一致的机制来启动和停止组件。.那么我们来分析一下这个Lifecycle接口都包含了什么。可以直接到tomcat包里的catalinajar里面找。定义了13个String类型的变量,定义了3个管理监听器。该方法定义了4个生命周期,定义了2个获取当前状态的方法。先说说这13个变量:;StringAFTER_DESTROY_EVENT="after_destroy";StringBEFORE_DESTROY_EVENT="before_destroy";StringPERIODIC_EVENT="CONFIGURE_START_EVENT="STOP_EVENT="STOPUREconfigure_stop";这13个变量是什么意思?《Tomcat架构解析》一书中说,LifecycleEvent事件的type属性中使用了这些常量信息来区分组件发送的LifecycleEvent事件的状态(如初始化前、启动前、启动中等).这种设计方式允许多个状态发送相同类型的事件,然后在不定义多个事件的情况下使用其中一个属性类来区分状态。其实从变量名就可以看出,初始化前,初始化后,启动,启动前,启动后。...说白了,就是表示组件发出时的状态。管理监控的三种方法是什么?voidaddLifecycleListener(LifecycleListenervar1);LifecycleListener[]findLifecycleListeners();voidremoveLifecycleListener(LifecycleListenervar1);而这三个监听器分别用于添加、查找和删除LifecycleListener类型的监听器。这里一共有三个接口。过一会我们再去子类中找。这里,我们要知道有这么一个东西,下面直接分析。4生命周期这个一定很简单,比如我们都知道Servlet的生命周期,init,start,stop,destroy,initialization,start,stop,destroy,voidinit()throwsLifecycleException;voidstart()throwsLifecycleException;voidstop()throwsLifecycleException;voiddestroy()throwsLifecycleException;2种获取状态的方法LifecycleStategetState();StringgetStateName();毕竟这个Lifecycle是一个接口,不是具体的实现类,我们要了解这个,那么就要到具体的实现类中去找这个内容,他的实现类是什么?来了,来了,LifecycleBaseLifecycleBaseLifecycleBase是一个抽象类,它是tomcat中所有组件类的基类。它实现了Lifecycle,但是Tomcat下很多子类也继承了它,所以他也很重要,publicabstractclassLifecycleBaseimplementsLifecycle{privateLifecycleSupportlifecycle=newLifecycleSupport(this);//源组件当前的状态,不同的状态触发不同的事件privatevolatileLifecycleStatestate;publicLifecycleBase(){this.state=LifecycleState.NEW;}}这里我们还需要注意这个LifecycleSupport类。LifecycleSupport定义了一个LifecycleListener数组类型的属性来保存所有的监听器,然后在里面定义增删查查执行监听器。方法,不信你看看。毕竟,这个类先是新的是有道理的。publicfinalclassLifecycleSupport{privateLifecyclelifecycle=null;privateLifecycleListener[]listeners=newLifecycleListener[0];privatefinalObjectlistenersLock=newObject();publicLifecycleSupport(Lifecyclelifecycle){this.lifecycle=lifecycle;}publicvoidaddLifecycleListener(LifecycleListenerlistener){Objectvar2=this.listenersLock;同步(this.listenersLock){LifecycleListener[]results=newLifecycleListener[this.listeners.length+1];for(inti=0;i=0){LifecycleListener[]results=newLifecycleListener[this.listeners.length-1];intj=0;for(inti=0;i