第二章 Tomcat源码分析—从启动流程到请求处理笔记

Tomcat 8.5下载地址

https://tomcat.apache.org/download-80.cgi

一、Tomcat启动流程

1、Tomcat源码目录

catalina目录:apache-tomcat-8.5.42-src\java\org\apache\catalina

catalina包含所有的Servlet容器实现,以及涉及到安全、会话、集群、部署管理Servlet容器的各个方面,同时它还包含了启动入口。

coyote目录:apache-tomcat-8.5.42-src\java\org\apache\coyote

coyote是Tomcat链接器框架的名称,是Tomcat服务器提供的客户端访问的外部接口,客户端通过Coyote与服务器建立链接、发送请求并接收响应。

El目录(org.apache.el),提供java表达式语言:

  • Jasper模块提供JSP引擎
  • Naming模块提供JNDI的服务
  • Juli提供服务器日志的服务
  • tomcat提供外部调用的接口api

2、Tomcat启动流程分析

2.1、启动流程解析:

注意是标准的启动,也就是从bin目录下的启动文件中启动Tomcat

 

我们可以看到这个流程非常的清晰,同时注意到,Tomcat的启动非常的标准,除去Boostrap和Catalin,我们可以对照一下Server.xml的配置文件。Server,service等等这些组件都是一一对照,同时又有先后顺序。

基本的顺序是先init方法,然后再start方法。

2.2、加入调试信息():

注意是标准的启动,也就是从bin目录下的启动文件中启动Tomcat

可以看到,在源码中加入调试的信息和流程图是一致的。

我们可以看到,除了Bootstrap和catalina类,其他的Server、service等等之类的都只是一个接口,实现类均为StandardXXX类。我们来看下StandardServer类:

问题来了,我们发现StandardServer类中没有init方法,只有一个类似于init的initInternal方法,这个是为什么?带着问题我们进入下面的内容。

 

 

 

二、组件的生命周期管理

1、各种组件如何统一管理

Tomcat的架构设计是清晰的、模块化、它拥有很多组件,加入在启动Tomcat时一个一个组件启动,很容易遗漏组件,同时还会对后面的动态组件拓展带来麻烦。如果采用我们传统的方式的话,组件在启动过程中如果发生异常,会很难管理,比如你的下一个组件调用了start方法,但是如果它的上级组件还没有start甚至还没有init的话,Tomcat的启动会非常难管理,因此Tomcat的设计者提出一个解决方案:用Lifecycle管理启动、停止、关闭。

2、<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值