简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器。Tomcat是一个运行Java程序的容器,通过启动startup.bat(bin目录下文件):
1)执行Bootstrap.java下的main()方法,开始启动tomcat容器,
2)继续调用init();
3)创建Catalina对象,这是个核心容器再继续调用load()方法,实际上是通过反射调用了catalina的load方法。
4)找到config file(server.xml)然后创建digester,解析server.xml,生成各组件对象(Server、Service、Container、Connector等)以及建立相互之间的关系。
下面就先来了解下Tomcat体系结构,再说下核心配置,最后说下性能优化策略。
1 Tomcat体系结构
整个Tomcat就是⼀个Catalina实例,Tomcat 启动的时候会初始化这个实例,Catalina实例通过加载server.xml完成其他实例的创建,创建并管理⼀个Server,Server创建并管理多个服务Service,如下图所示:(即:Tomcat是 1个Server 对应 N个Service)
每⼀个Service实例下可以有N个Connector实例和1个Container实例以及若干其他模块为它提供⽀撑的,它将若⼲个Connector组件绑定到⼀个Container。
Connector连接器,负责对外交流,处理Socket连接,负责⽹络字节流与Request和Response对象的转化;
Container容器,负责负责内部处理,处理⽤户的servlet请求,并返回对象给web⽤户的模块;
Jasper 模块提供 JSP 引擎,Naming 提供JNDI 服务,Juli 提供⽇志服务,Executor线程池等等
每个Connector连接器包含:
EndPoint :通信监听的接⼝,是具体Socket接收和发送处理器,是对传输层的抽象,因此EndPoint⽤来实现TCP/IP协议的
Processor :⽤来实现HTTP协议,Processor接收来⾃EndPoint的Socket,读取字节流解析成Tomcat Request和Response对象,并通过Adapter将其提交到容器处理,Processor是对应⽤层协议的抽象
ProtocolHandler :通过Endpoint 和 Processor , 实现针对具体协议的处理能⼒。Tomcat 按照协议和I/O 提供了6个实现类 (AjpNioProtocol ,AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol ,Http11Nio2Protocol ,Http11AprProtocol)
Adapter :由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat定义了⾃⼰的Request类来封装这些请求信息。
Container实例包含:
Engine 表示整个Catalina的Servlet引擎,⽤来管理多个虚拟站点,⼀个Service最多只能有⼀个Engine,但是⼀个引擎可包含多个Host
Host 代表⼀个虚拟主机,或者说⼀个站点,可以给Tomcat配置多个虚拟主机地址,⽽⼀个虚拟主机下可包含多个Context
Context 表示⼀个Web应⽤程序, ⼀个Web应⽤可包含多个Wrapper
Wrapper 表示⼀个Servlet,Wrapper 作为容器中的最底层,不能包含⼦容器
2 Tomcat核心配置
Tomcat的下载包解压之后的目录
Tomcat 作为服务器的配置,主要是 server.xml ⽂件的配置;server.xml中包含了 Servlet容器的相关配置;server.xml在conf文件下面。
server.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--
port:关闭服务器的监听端⼝
shutdown:关闭服务器的指令字符串
-->
<Server port="8005" shutdown="SHUTDOWN">
<!-- 以⽇志形式输出服务器 、操作系统、JVM的版本信息 -->
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- 加载(服务器启动) 和 销毁 (服务器停