设为首页 收藏本站
查看: 561|回复: 0

[经验分享] 学习tomcat 小记(8)

[复制链接]

尚未签到

发表于 2017-1-25 06:42:11 | 显示全部楼层 |阅读模式
Host和Engine

1. Host
1)StandardHost类
catalina中org.apache.catalina.core.StandardHost类是Host接口的标准实现。该类继承自the org.apache.catalina.core.ContainerBase类,实现了Host和Deployer接口。
与StandardContext和StandardWrapper类似,StandardHost的构造函数会将basic valve(org.apache.catalina.core.StandardHostValve)添加到其pipeline中。

每当接收到一个http请求,会调用host的invoke方法。在StandardHost类并没有提供invoke方法的实现,因此,它会调用其父类ContainerBase的invoke方法。而会ContainerBase的invoke方法调用StandardHostValve的invoke方法。此外,StandardHostValve的invoke方法会调用StandardHost的map方法来获取一个context处理http请求。

2)StandardHostMapper类

3)StandardHostValve类
org.apache.catalina.core.StandardHostValve类是StandardHost的basic valve。
在tomcat4中,invoke方法通过调用StandardHost的map方法来获取合适的context。
最后,invoke方法调用context的invoke来处理http请求。

2. Engine
1)Engine接口
org.apache.catalina.Engine接口表示了一个engine对象,也就是tomcat整个的servlet引擎。当部署tomcat时要使用多个虚拟机的话,就需要使用engine。事实上,部署的tomcat都会是使用一个engine。

2)StandardEngine类
org.apache.catalina.core.StandardEngine类是Engine接口的标准实现。相比与StandardContext类和StandardHost类,StandardEngine类相对小一些。在实例化的时候,StandardEngine会添加一个basic valve
作为一个顶层container,engine的子container只能是host,所以,若是给它设置以了一个非host的container,会抛出异常。

3)StandardEngineValve类
org.apache.catalina.core.StandardEngineValve类是StandardEngine的basic valve。
在验证了request和response对象的类型后,invoke方法会获取host对象,用来处理请求。

3. Server与Service
1)server
org.apache.catalina.Server接口表示了整个catalina的servlet引擎,囊括了所有的组件。server使用一种优雅的方法来启动/停止整个系统,不需要对connector和container分别启动/关闭。
当启动server时,server会负责启动其所有的组件,然后就等待关闭命令。server使用service来获取组件,如connector和container。

shutdown属性保存了发送给server的关闭命令。port属性保存了server会从哪个端口获取关闭命令。addService方法用于为server添加service,removeService方法则可以删除某个service。initialize方法会在启动之前执行。

2)StandardServer
org.apache.catalina.core.StandardServer类是Server接口的标准实现。其中的shutdown方法是最重要的,用于关闭server。该类中的许多方法用于将server配置信息保存为一个新的server.xml文件。
与StandardServer的生命周期有关的方法有:initialize,start,stop和await。与其他组件类似,initialize用于初始化,start用于启动,然后调用await等待关闭命令,最后,调用stop关闭server。调用await方法后,server会被阻塞,直到总8085端口(或其他端口,自定)收到了关闭命令。当await命令返回后,stop方法会关闭所有的子组件。

3)Service接口
org.apache.catalina.Service接口表示了一个service。一个service可以持有一个container和多个connector,所有的connector都会与这个container相关联。

4)StandardService类
org.apache.catalina.core.StandardService类是Service接口的标准实现。StandardService的initialize方法用于初始化添加到其中的connector。StandardService类还实现Lifecycle接口,因此,它也可以启动connector和container。

connector和container
StandardService对象中有两种组件:connector和container。其中container只有一个,connector可以有多个。多个connector使用tomcat可以多种不同的请求协议。例如,一个处理http请求,一个处理https请求。

4.Bootstrap类
Bootstrap类的main方法会创建一个engine,一个host,一个context,两个wrapper和一个connector。然后,将它们进行关联。但,需要注意的是,connector并没有与顶层container(engine)相关联。相反,main方法创建了一个service对象,和一个server对象,将service添加到server中:
Service service = new StandardService();
    service.setName("Stand-alone Service");
    Server server = new StandardServer();
    server.addService(service);

然后,main方法将connector和engine添加到service中:
service.addConnector(connector);
service.setContainer(engine);

这样,connector就和container关联起来了。然后,main方法调用server的initialize和start方法,初始化connector,并将connector和container启动:
if (server instanceof Lifecycle) {
      try {
        server.initialize();
        ((Lifecycle) server).start();

接下来,main方法调用server的await方法,进入循环等待,监听8085端口。注意,此时connector已经其中,但监听的是另一个端口8080。当await返回时,说明接收到了关闭命令,此时,main方法调用server的stop方法,关闭其所有组件。

Stopper类
Stopper类通过socket向server发送一个关闭命令,从而关闭server。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332974-1-1.html 上篇帖子: Tomcat配置HTTP压缩功能 下篇帖子: Tomcat线程Stage值说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表