TOMCAT原理

一、TOMCAT的基本架构

1、servlet基本架构

由servlet容器加载servlet类,决定调用哪个servlet也就是业务类。整体遵守的就是servlet规范。

2、Servlet容器工作流程

当请求由http服务器转发给Servlet容器后,servlet会根据url的映射关系,定位到servlet。

  • 定位servlet
  • 加载servlet
  • 调用servlet

3、tomcat架构

两部分核心:

  1. 处理socket连接,负责处理网络请求 - Connector
  2. 加载和管理servlet,以及处理request请求 - Container

二、Coyote连接器

1、Coyote

Coyote作为独立的模块,只负责集体协议和IO操作,与Servlet规范没有直接关系,因此Request和Response也与Servlet没有关系。这样就做到了组件之间的解藕。

支持的IO模型:

  • NIO:非阻塞IO,采用java NIO类库实现
  • NIO2:一步IO,采用JDK7最新的NIO2类库实现
  • APR:采用apache的可以值类库实现

支持的应用层协议:

  • HTTP1.1:这是大部分web采用的访问协议
  • AJP:用于和Web服务器即成,以实现对静态资源的优化和集群部署
  • HTTP2:下一代HTTP协议,性能大幅度提升

tomact容器支持多种IO模型和应用层模型。每个容器可以连接多个Coyote。所以一个coyote+catalina才能对外提供服务,也就是一个service。

2、Coyote组件的架构

  1. EndPoint:接受socket请求,发送给Processor
  2. Processor:将socket请求,封装为http请求,request转发给Adapter
  3. Adapter:由适配器将request对象封装成servletRequest转发给容器
  4. ProtocolHandler: EndPoint+Processor

三、Catalina容器

1、Catalina容器

Catalina是Tomcat的servlet容器。包含了后面涉及到的安全、会话、集群、管理的Servlet容器架构的各个方面。

Tomcat本身就是一个servlet容器,所以Catalina就是tomcat的核心。其它的模块都是为Catalina容器进行提供服务的。 

2、Catalina结构

  • Catalina:负责解析Tomcat配置文件,以此来创建服务器Server组件,并根据命令管理
  • Server:表示整个Catalina Servlet容器及其它组件,负责启动Servlet引擎,tomcat连接器
    • Service:将Connector和Container绑定到一期
      • Connector:连接器
      • Container:servlet容器

3、Container结构

Container包含了Engine、Host、Context、Wapper,它们不是平行关系,而是父子关系。

  • Engine:表示整个Catalina的Servlet的引擎,一个Service只能包含一个Engine
  • Host:代表一个虚拟主机或者一个站点,可以个给Tomcat配置多个虚拟主机
  • Context:代表一个web应用,一个应用可以有多个Context
  • Wapper: 代表一个Servlet

其实在server.xml中就包含了以上的各个组件和它们之间的关系。

四、启动流程介绍

父组件启动同时调用子组件的启动方法。记载tomcat的配置文件,初始化容器组件,监听对应的端口号,准备接受客户端请求。

在tomcat,所有的功能都被抽象成组件,他们都有一个统一的接口,就是Lifecycle接口,它的核心方法有:

  • init():初始化组件
  • start():启动组件
  • stop():停止组件
  • destroy():销毁组件

个组件默认实现如下:

五、请求处理流程介绍

1、请求处理流程

tomcat是使用mapper组件,进行请求的映射。可以看成是一个多层次的map。

 

六、Jasper引擎

1、简介

主要作用就是解析jsp页面,然后生成class字节码,向浏览器输出HTML。由于使用的越来越少了,在这里就不进行过多介绍。

2、编译方式

  • 运行时编译:请求第一次的时候,进行编译
  • 预编译:启动项目的时候,直接编译完成

七、服务器配置

1、核心配置文件server.xml

是tomcat服务器的核心配置文件,包含了tomcat中servlet(Catalina)容器的全部配置。

  • Server:根标签,配置关闭端口,配置相关的监听器、全局命名和多个Service
  • Service:服务名字就是Catalina,可以配置多个连接器、一个Engine
  • Executor:配置tomcat线程池相关内容,如果配置则多个连接器使用一个,否则每个连接器使用自己的线程池
  • Connector:连接器,可以配置port、protocol、conectionTimeout、redirectProt(https)、executor、encoding
  • Engine:name、defaultHost(默认主机)、jvm(使用的虚拟机)
  • Host:name、appBase(部署路径)、unpackWARs(是否解压WAR包)、autoDeploy(是否自动部署)
  • Context:虚拟主机中的项目
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值