Tomcat架构简述
概述
Tomcat是一个web应用服务器,也可以称作是jsp/servlet容器,Tomcat不仅可以相应web应用而且自身集成了http服务,是一个高效的web服务器。
Tomcat虽然本身的结构很复杂,但是同时Tomcat也高度的模块化,所以从结构图上来看Tomcat的设计非常的简洁。
由上图可以看出来一个应用服务器(Tomcat server)可以拥有多个service服务,一个service服务中有多个Connector组件和一个Container组件以及多个其他组件,例如日志,Session,命名等,其中Connector和Container这两个组件是Tomcat的核心组件,下面将大致一一介绍每个组件的作用。
Server服务器
server服务器指Tomcat容器。
Service服务
service服务指的就是Server服务器能提供的服务,比如http服务,在Tomcat里就是指web服务。
Jasper
Jasper组件负责jsp页面的解析,jsp属性的验证,同时也负责将jsp页面动态转换为java代码并且编译成class文件。
Naming
Naming组件负责管理相关资源,包括数据库连接池,EJB,mail等通过JNDI获取的内容。
Logging
Logging组件负责记录相关日志,包含访问错误信息等。
Session
Session组件负责session的管理,序列化反序列化等。
需要重点介绍的是Connector组件和Container组件
可以参照一张更全面的图
Connector
由上面的图我们可以看出来一个Service服务可以包含多个Connector,实际上Tomcat中包含了3个Connector,分别对应HTTP请求,HTTPS请求以及AJP请求。那么Connector在Tomcat中到底扮演了什么样的角色呢?Tomcat中的Connector负责的任务就是接受请求,创建request和response,解析请求中数据,将数据封装到request中,最后将request和response作为参数传递给Container对象!
由于不同协议规则不同,解析起来也是不一样的,所以需要多个Connector。
Container
Container实际上只是容器的概称。而Tomcat中包含有多个Container。那么Container的作用是什么呢?Container的作用就是接收Connector传递的request和response,对request和response进行了一些过滤封装,同时调用对应的Servlet去处理该request,最后将处理完成后的结果封装到response中返回给客户端!
每个Container从大到小分别为Engine
-->Host
-->Context
-->Wrapper
-
Engine
容器代表整个Catalina servlet引擎 -
Host
容器表示一个虚拟主机,Tomcat自带的是一个叫localhost的主机 -
Context
容器表示一个WEB应用程序 -
Wrapper
表示一个独立的Servlet
对于一个Engine可以包含多个Host,Tomcat自带了一个叫做localhost的Host容器,一个Host容器可以包含多个Context,一个Context可以包含多个Wrapper。
是不是感觉这几个单词很熟悉,是的!在Tomcat中我们可以使用Tomcat默认提供的这些容器,也可以在CATALINA_HOME/conf
下的server.xml
中配置,而这几个单词正是对应server.xml
中的各个配置选项的名称!
在下面的几个章节我们将逐渐深入到各个组件中去探索Tomcat是如何工作的。