概述
Tomcat 是一开源的 Java Web 服务器,是当今最流行的基于 Java 的 Web 应用服务器。Tomcat 具有以下特点:
- Apache软件基金会出口
- 开源软件
- 源代码是 Java 写的
由于Tomcat 是使用Java语言实现的,因此 Tomcat 的运行依赖于 Java 运行环境,故运行 Tomcat 前需要正确安装 JRE(Java Runtime Environment)。
安装
可以在 Tomcat 官方网站进行 Tomcat 的下载,目前 Tomcat 的最新开发版本是9.0.x,最新稳定版本8.0.x。在生产环境部署 Tomcat 的话,我们一般使用7.0.x版本。
Tomcat 官方网站:http://tomcat.apache.org/index.html。下载所需的 Tomcat 版本后,对下载文件进行解压,即完成 Tomcat 的安装。
目录结构
Tomat 解压后的目录结构如下:
图1:Tomcat 的目录结构
- bin:可执行文件目录
- conf:配置文件目录
- lib:Tomcat的依赖库目录
- logs:日志目录
- temp:临时文件夹
- webapps:默认的应用部署目录
- work:供web应用使用
启动
为了启动 Tomcat,可以先设置 CATALINA_HOME
环境变量。CATALINA_HOME
变量用于指定 Tomcat 目录位置,通过以下方式可以设置这个变量:
$ export CATALINA_HOME="/Users/lihao/Soft/tomcat9"
$ echo $CATALINA_HOME
/Users/lihao/Soft/tomcat9
正如上面所述,bin 目录包含了启动脚本,其中包括 startup.sh
,可以通过执行该脚本来启动 Tomcat。
$ ./bin/startup.sh
Using CATALINA_BASE: /Users/lihao/Soft/tomcat9
Using CATALINA_HOME: /Users/lihao/Soft/tomcat9
Using CATALINA_TMPDIR: /Users/lihao/Soft/tomcat9/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home
Using CLASSPATH: /Users/lihao/Soft/tomcat9/bin/bootstrap.jar:/Users/lihao/Soft/tomcat9/bin/tomcat-juli.jar
Tomcat started.
为了验证启动是否成功,打开浏览器,输入http://127.0.0.1:8080
,可以看到浏览器输出,这说明Tomcat 已成功启动 。
图2:Tomcat 浏览器展示
如果需要设置 Tomcat 运行参数,可以通过设置 JAVA_OPTS
参数来实现。例如,
$ export JAVA_OPTS="-server -Xms1024m -Xmx1024m"
$ echo $JAVA_OPTS
-server -Xms1024m -Xmx1024m
$ ./bin/startup.sh
……
Tomcat started.
-Xms
表示 Java 初始化堆的大小,-Xms
与 -Xmx
设成一样的值,避免 JVM 反复重新申请内存,导致性能大起大落。-Xmx
表示最大 Java 堆的大小,当应用程序需要的内存超出堆的最大值时 JVM 就会提示内存溢出,并导致应用服务崩溃。上面命令设置 初始化堆为1024M,最大堆为1024M。
server.xml
server.xml
文件是 Tomcat 最重要的服务器配置文件,其文件的结构如下:
图3:server.xml的文件结构
通过 server.xml
文件的结构,可以一窥 Tomcat 总体设计的架构。
请求处理流程
Tomcat 处理用户请求的流程图如下:
图4:Tomcat 处理用户请求流程
用户发出请求后,Tomcat 的 Connector 负责接收请求,然后将请求交由 Container 处理,Container 处理请求后,最后由 Connector 返回响应结果给用户。
Connector
Connector是 Tomcat 的连接器,Connector的作用是接收用户的网络请求,然后将请求封装给 Container 处理。Tomcat 中默认的连接器是 Coyote。
Connector 默认以 BIO(blocking IO,阻塞式IO)运行。可以通过修改设置 Connector 以其他模式运行。
Connector 包括以下几个常用的参数配置:
- port:监听的端口号
- address:监听的IP地址,对于拥有多个IP地址的服务器,可以通过此配置设定监听的IP地址
- protocol:使用的协议。默认值是
HTTP/1.1
- connectionTimeout:客户请求连接的超时时间
- acceptCount:接受的最大请求数,当排队中的请求数量超出此值时,将会拒绝后面的请求
- maxConnections:最大连接数
- minSpareThreads:最小空闲线程数
- maxThreads:最大线程数
Container
Container 的作用是负责处理用户的请求,并把响应结果返回给客户端。
Tomcat 日志
Tomcat 的日志主要包括以下几类:
- 系统运行日志
- 访问日志
- 应用日志
访问日志
可以在server.xml
里面对访问日志进行配置:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
访问日志的配置包括,日志文件名和前缀和后缀名称,日志的输出格式,日志的输出目录,等等。
Tomcat 部署
完成 Web 应用的开发后,可以通过将应用文件夹打成 war 包,并将这个 war 包放到 Tomcat 的 webapps
目录的方式,进行 Web 应用的部署。
打 war 包的命令如下:
cd 【应用文件夹名称】
jar cvf【应用文件夹名称】 .
将会生成一个 war 包。将这个 war 放到 webapps
目录,便可以访问这个 Web 应用。