Tomcat

一、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项目部署

  1. 隐式部署

    直接将文件夹、war、jar放到webapps目录,tomcat会根据文件夹名称自动生成虚拟路径。

    特点:部署简单。

    缺点:项目修改需要重启Tomcat。

  2. 显示部署

    显示部署分为两种:

    1. 添加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。

  1. 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

  2. 配置线程池 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" />
  1. 去除tomcat访问 记录

  2. 关闭自动重载,热部署方式

xml 复制代码
<Context path="/comet" docBase="D:\work_tomcat\ref-comet.war" reloadable="false" />
相关推荐
zquwei2 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
TT哇8 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦31 分钟前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
w_31234541 小时前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S1 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos2 小时前
C++----------函数的调用机制
java·c++·算法