Tomcat源码分析-tomcat架构

1.Tomcat是一个web容器,将web项目存放于Tomcat的webapps目录下,并启动Tomcat就可以启动项目。那么tomcat是如何工作的呢?为什么自己的项目放进webapps下就可以启动呢?

2.我们知道Java项目能够运行一定要有一个main方法,那么我们写的项目的main方法在哪里呢?是没有main方法吗?

   Java项目启动一定要有main方法作为入口的,我们要启动的Java项目的main方法并不是在项目中,是在Tomca中,Tomcat中有一个main,Tomcat启动后是从main方法开始的,Tomcat的main方法在org.apache.catalina.startup.Bootstarp类中。

   我们的项目只是tomcat启动时加载的一个Context容器而已。

   那么我们先看一下Tomcat的整个架构图:

   

            Tomcat这样进行分层最大的好处就是启动、管理、扩展方便,每个组件自己所负责的职责就很明显。就像Web项目里的MVC进行分层之后,各自负责的任务就很明确。比如server组件主要负责全局的监听和配置文件加载。connector负责接收请求。

       下面看一下各个容器都是负责什么任务:

        Service:Tomcat的顶级容器,在Tomcat中是StandardService类,org.apache.catalina.core.StandardService是全类名。

                        ---提供监听器机制,用于在Tomcat整个生命周期中对不同时间进行处理;

                        ---提供Tomcat容器全聚德命名资源实现;

                        ---监听某个端口已接收SHUTDOWD命令;

        下面这个是StandardServer.java文件的源代码。由于格式问题并不能全部截屏出来。(可自行下载源码进行查看)

        

         虽然没有全部截图,但是我们可以看到StandardServer类实现了LifecycleMBeanBase类和接口Server。 我们可以看下StandardServer的继承关系图。

         

         StandardServer实现了Server接口,Server接口是规定了本组件的一个接口,有其他接口Service,Engine,Context等接口。自己是哪个组件就实现哪个接口。其中LifecycleMBeanBase是一个抽象类,主要是负责实现MBeanRegistration接口和LifecycleBase抽象类中可统一实现的方法的一个中间层类。LifecycleBase一样的概念,我们只需要了解MBeanRegistration接口和Lifecycle接口的作用即可。

        Lifecycle接口截图

        

       Lifecycle是管理生命周期的一个类,在Tomcat中几乎所有组件实现了这个接口,由此可见Tomcat的组件都是通过Lifecycle进行统一管理的。截图中的两个红框是它定义的接口方法和字段,详细信息请看生命周期解析文章。

       并且Tomcat的Lifecycle中通过钩子方法和具体的组件进行特色的区分。

       钩子方法:比如init()方法,在Server和service中有不同的初始化方案要进行初始化,那么就在LifecycleBase抽象类中实现init()方法,并在init()方法中设置一个方法initInternal(),initInternal()在根据不同的接口实现类去实现他们各自的需要。

       比如server在initInternal()方法中初始化service等。

       MBeanRegistration是负责Java JMX框架提供的注册MBean的接口,引入此接口是为了便于使用JMX提供的管理功能;

       Tomcat的其他容器都是以这样的模式进行构造的。比如Service,Context,Host,Engine等。

       Tomcat还有的其他知识:比如一个请求的处理过程,servlet的封装过程,tomcat的启动、停止过程,tomcat加载配置文件对象和组件,tomcat的Context的加载项目过程,解析servlet过程等问题。

   

 

转载于:https://www.cnblogs.com/summer-java/p/9914330.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值