说明: 关于Tomcat是什么以及Tomcat有什么用,这里不做解释,如果对以上两个问题仍存在疑问,请百度。
理解一个框架的最好办法是看源码,但有时候可能会看不懂,所以,这里不看源码(因为可能没什么用),只看官方文档。我用的是Tomcat-9.0,想看官方文档的可以点击这个链接Tomcat-9.0文档
一、首先了解下Tomcat的各个目录有什么用
可以看到Tomcat的目录,作如下解释:
1、bin目录:保存了Tomcat服务器的各个脚本,如开启和关闭等
2、conf目录:保存了Tomcat的配置文件,server.xml啊、web.xml等都在这里
3、lib目录:这是我们所熟悉的,是各种jar包的目录
4、log目录:也很容易识别,是保存日志用的
5、temp目录:是Tomcat运行时产生的文件
6、webapps目录:供外界访问的资源的目录
7、work目录:Tomcat的工作目录
插入: 根据本人最近的学习发现,webapps是Tomcat供外界访问资源的目录所在地,但是每次重启Tomcat这里面ROOT目录下的资源就会重新加载,换句话说就是:当你重启Tomcat之后,之前上传到服务器的文件啊、图片啊都会消失。针对这一现象有两种解决方案:第一种就是上传文件资源和webapps目录下的ROOT目录在同一级,这样就重启之后就不会把之前的资源丢掉了;还有一种方法就是把上传的文件保存在本地磁盘里,利用虚拟目录进行映射,关于IDEA如何设置虚拟目录参考这篇文章:IDEA设置虚拟目录。
二、Tomcat重要配置
如果我们想要改变Tomcat的某些配置怎么办呢?比如说改变访问时的8080端口,加载本地磁盘中的其他文件等等,我们可以去conf/server.xml文件下进行修改。下面对其中的各个标签根据官方文档进行说明。
1、< Server >标签,是整个servlet容器,必须是唯一的,而且必须是最外面标签(解释:这里的唯一说的是只在一个JVM中,一般一个JVM只能支持一个Tomcat ,如果同时运行多个JVM当然可以运行多个Tomcat)。看下都有哪些比较常用的属性:
className | 必须实现org.apache.catalina.Server 接口,没有实现时默认标准 |
address | 服务器等待关机命令的TCP / IP地址。如果没有指定地址,则使用localhost |
port | 服务器等待关机命令的TCP / IP端口号。设置为-1以禁用关闭端口 |
shutdown | 必须通过TCP / IP连接接收到指定端口号的命令字符串,以关闭Tomcat |
2、< Service >标签,表示一个或多个连接器组件的组合,这些组件共享一个用于处理传入请求的引擎组件,Server下可以有多个Service
className | 默认必须实现org.apache.catalina.Service,否则采取标准 |
name | 顾名思义是Service的名字,如果采用的还Catalina,service的名字将会包含在log中,name必须唯一 |
3、< Executor >,该标签表示可在组件之间共享的线程池,必须嵌套在Service标签内,为了能被连接器失去,必须出现在< Connector >之前。部分重要属性:
threadPriority | 线程优先级,默认为5 |
maxThreads | 最大活跃线程数,默认为200 |
minSpareThreads | 最小活跃线程数,默认为25 |
maxIdleTime | 活跃线程数大于最小活跃线程数时,空闲线程关闭等待最大时间,默认为60000ms(一分钟) |
maxQueueSize | 线程池满情况下的请求排队大小,默认为Integer.MAX_VALUE |
4、< Connector >、Tomcat支持三种协议:HTTP/1.1、HTTP/2和AJP,关于Connector标签可以上官网上查看具体的使用方法,这里给出源文档中的使用,如下
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
5、< Context >、在特定的虚拟机中运行,每个Web应用程序都基于Web应用程序归档 (WAR)文件或包含相应解压缩内容的相应目录。可以根据需要定义任意数量的Context元素,名称必须唯一,上下文路径不需要唯一。并不推荐直接将< Context >直接放在server.xml中,因为这样在不重启Tomcat时不会重新加载配置文件,而且这样是的修改
< Context >更具有侵入性,默认的Context元素(见下文)也将 覆盖直接放在server.xml中的任何< Context >元素的配置。为防止这种情况,override 应将server.xml中定义的
< Context >元素的属性设置为true。具体属性不展示。
5、< Engine >、Engine元素表示与特定的Catalina服务相关联的整个请求处理机器。它接收并处理来自一个或多个连接器的所有请求,并将完成的响应返回给连接器,以便最终传输回客户端。
6、< Host >、表示一个虚拟主机,它是一个服务器的网络(如“www.mycompany.com”)与运行Tomcat的特定服务器的关联。要使客户端能够使用其网络名称连接到Tomcat服务器,必须在管理您所属的Internet域的域名服务(DNS)服务器中注册此名称- 有关详细信息,请与网络管理员联系。一个或多个Host元素嵌套在 Engine元素中。在Host元素内,您可以为与此虚拟主机关联的Web应用程序嵌套Context元素。