Tomcat源码剖析笔记(一)

一、Tomcat主要功能

Tomcat源码剖析笔记(一)_第1张图片

根据此图可知,tomcat可以处理接收的http请求,这里的http是以http报文的形式接收并进行处理,也就是说tomcat是一个http服务器,接收到http请求后会对它进行处理。tomcat其实是实现了servlet规范,所以tomcat也是一个servlet容器。

所以说tomcat

第一个功能是可以做http服务器(TCP、IP)进行socket通信。

第二个是servlet容器功能(自带的servlet+自定义servlet),servlet处理具体的业务逻辑,这是tomcat两个最核心的功能。

tomcat架构的思想就是在这两个基础上进行开发。

 

二、Tomcat架构解读

Tomcat源码剖析笔记(一)_第2张图片

连接器组件Connector设计出了的就是完成Http服务器功能的,并且在tomcat中这个连接器有个名字叫做Coyote

容器Container组件设计出来完成servlet容器功能,它叫做Catalina

 

在Coyote中,EndPoint是用来接收客户端请求,EndPoint叫做通信端点,它对应TCP、IP层。接收到请求后交给Processor来处理Http报文,其实tomcat擅长处理动态资源,并不适合处理静态资源。

EndPoint组件进行Socket通信,处理tcp、ip协议。Processor组件解析处理Http报文,处理Http协议。这两个组件有一个组合名称:ProtocolHandler

 

tomcat支持的网络io模型:BIO、NIO、NIO2、APR

APR是在tomcat调优过程中一个比较重要的模型。

 

Processor将Request对象交给Adapter适配器转换为ServletRequest交给Catalina进行处理。

Server:Server容器就代表一个Tomcat实例(Catalina实例),其下可以有一个或多个Service容器

Service:Service是对外提供具体对外服务的,一个Service容器中可以有多个Connector组件(监听不同端口请求,解析请求)和一个Servlet容器(做具体业务逻辑处理)

Engine和Host:Engine组件(引擎)是Servlet容器Catalina的核心,它支持在其下定义多个虚拟主机(Host),虚拟主机允许Tomcat引擎在将配置一台机器上的多个域名。例如www.baidu.com和www.bat.com分割开来互不干扰。

Context:每个虚拟机又可以支持多个web应用部署在它的下边,这就是我们所熟知的上下文对象Context,上下文是使用由Servlet规范中指定的Web应用程序格式表示,不论是压缩过的war包形式的文件还是未压缩的目录形式

Wrapper:在上下文中可以部署多个servlet,并且每个servlet都会被一个包装组件(Wrapper)所包含(一个wrapper对应一个servlet)

 

三、Tomcat架构好处

1.一层套一层的方式,其实组件关系还是很清晰的,也便于后期组件声明周期的管理。‘’

2.tomcat这种架构设计正好和xml哦配置文件中标签的包含方式对应上,那么后续在解读xml以及封装对象的过程中就容易对应

3.便于子容器继承父容器的一些配置

 

四、tomcat源码剖析技巧

剖析源码需要讲究一些原则,注意一些方法和技巧,否则很容易就在浩瀚的源代码海洋中迷失自己

好处:提高我们的架构思维,深入认识代码,深入理解一个项目、框架

原则:

  1. 定焦原则:抓主线(抓住一个核心流程去分析,不要漫无目的的去看源代码)
  2. 宏观原则:站在上帝的视角,先脉络后枝叶(切忌试图搞清楚看到的每一行代码)

方法和技巧

  1. 断点(观察调用栈)
  2. 反调(右键,Find Usages)
  3. 经验之谈(比如一些doXXX,service等一些,往往都是具体干活的一些方法)
  4. 见名思意(通过方法名称就可以联想到这个方法的作用)
  5. 多多实际动手操练,灵活运用上述方法技巧

你可能感兴趣的:(服务器)