一、Tomcat体系架构
1.1 Tomcat介绍
Tomcat 是一个免费的、开源的、轻量级的Web应用服务器。
Tomcat8.5的特点
支持Servlet3.1
默认采用NIO,移除BIO
支持NIO2(AIO,异步非阻塞IO)
支持HTTP/2协议
默认采用异步日志处理
1.2 Tomcat启动方式
一般启动:startup.bat/sh
嵌入式启动:springboot
Debug启动
1.3 Tomcat项目部署
-
隐式部署
直接将文件夹、war、jar放到webapps目录,tomcat会根据文件夹名称自动生成虚拟路径。
特点:部署简单。
缺点:项目修改需要重启Tomcat。
-
显示部署
显示部署分为两种:
- 添加context元素
在配置文件(server.xml)的Host标签下加入Context标签。
xml<Context path="/comet" docBase="D:\work_tomcat\ref-comet.war" />
2)新建xml文件
在/conf/Catalina/localhost文件夹下创建xml文件(访问路径为文件名)。
例如:demo.xml,内容为:
xml<Context docBase="D:\work_tomcat\ref-comet" />
1.4 Tomcat目录结构
bin目录
startup:检查catalina执行所需环境,并调用catalina启动tomcat。
catalina:真正执行启动,可以在该文件中设置虚拟机参数。
shutdown:停止tomcat。
version:查看版本号。
configtest:校验tomcat配置文件server.xml格式、内容等是否合法。
server:安装tomcat服务。安装后可以用系统服务的方式启动。
webapps 目录
存放web项目的目录,每一个文件夹代表一个项目。tomcat安装后存在的文件夹属于tomcat默认项目,其中ROOT项目在访问时不需要加项目名称。
lib目录
tomcat类库,这个目录下的jar部署在该tomcat下的所有项目都可以共享。
work目录
存放项目运行时生成的文件。
temp目录
存放临时文件,tomcat停止后会删除。
logs目录
存放tomcat日志文件。
localhost.xx.log:web应用的内部程序日志。
catalina.xx.log:控制台日志。
host-manager.xx.log:tomcat管理页面host-manager项目操作日志。
localhost_access_log_xx.log:tomcat访问日志。
conf目录
server.xml:tomcat配置文件。
web.xml:tomcat中所有应用默认的部署描述文件,定义了基础的Servlet和MIME映射。如果部署的应用不包含web.xml,tomcat将使用该文件初始化部署描述。
context.xml:定义所有web应用需要加载的Context配置,如果web应用指定了自己的context.xml,该文件将被覆盖。
tomcat-users.xml:配置tomcat用户信息。
1.5 Tomcat 组件
1.5.1 Server
顶级组件,代表tomcat运行的实例。
1.5.2 Service
一个Server可以包含多个Service。
1.5.3 Connector
连接器,监听转换socket请求,将请求交给Container处理,支持不同协议和不同的IO方式。
1.5.4 Container
表示能够执行客户请求并返回响应的一类对象。不同级别的容器有:Engine、Host、Context、Wrapper。
1.5.5 Engine
整个Servlet引擎,最高级的容器对象。
1.5.6 Host
Servlet引擎中的虚拟机,主要与域名有关,一个服务器有多个域名,可以使用多个host。
1.5.7 Context
代表Servlet的Context,它具备了Servlet运行的基本环境,表示web应用程序本身。
1.5.8 Wrapper
用于表示web应用中定义的Servlet。
1.5.9 Executor
tomcat组件间可以共享的线程池。
二、Tomcat优化
2.1 server.xml优化
tomcat配置的优化,可参考tomcat默认管理页面(http://localhost:8080)中的TomcatXX Configuration。
-
Connector 连接器优化
IO模型优化
xml<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" />
protocol 可选参数:
org.apache.coyote.http11.Http11Protocol - blocking Java connector
org.apache.coyote.http11.Http11NioProtocol - non blocking Java NIO connector
org.apache.coyote.http11.Http11Nio2Protocol - non blocking Java NIO2 connector
org.apache.coyote.http11.Http11AprProtocol - the APR/native connector.2)配置线程池 Executor
-
配置线程池 Executor
xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
xml
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-
去除tomcat访问 记录
-
关闭自动重载,热部署方式
xml
<Context path="/comet" docBase="D:\work_tomcat\ref-comet.war" reloadable="false" />