![c2da644ddce8c03251dbf4a67ab597e9.png](https://i-blog.csdnimg.cn/blog_migrate/cd473a3d213d5f682b619c64007b45ce.jpeg)
在Tomcat架构初识介绍了Tomcat的架构,其中主要包括了服务器(server)、服务(service)、连接器(connector)、引擎(engine)、主机(host)、上下文(context)等组件以及它们之间的从属关系。
那么这些组件在哪里进行定义了?
1.server.xml文件的作用
server.xml文件中各元素对应着Tomcat架构中各个组件,通过修改xml文件中的元素配置信息,实现对Tomcat中各个组件的控制。
2.server.xml文件的位置
tomcat安装位置confserver.xml
3.server.xml文件解析
(1)服务器(Server)
可以看到顶级元素是Server,其有port和shutdown两个属性,代表关闭这个Server,也就是Tomcat的端口和命令,可以进行修改。
当启动了多个Tomcat的时候,端口一定要修改,不然会出现端口冲突的问题。
![8f7432b14c0892772de67c7978798523.png](https://i-blog.csdnimg.cn/blog_migrate/c37f3a901b91640409be1fb022ae9687.jpeg)
(2)服务(Service)
一个Server可以包含多个Service,一个service包含了connector、engine、host、context等组件。
service有一个name的属性,默认为Catalina,可以进行修改。
![25debc3032c53e70446af4d676ad3518.png](https://i-blog.csdnimg.cn/blog_migrate/0e8c757ef7eb4c1ce2be681e7293fd21.jpeg)
(3)连接器(Connector)
Connector元素的属性有协议和端口,tomcat首先通过这两项接收客户端的请求,并创建Request和Response对象,传给Engine,分配线程让Engine来处理这个请求。端口可以修改。
![ff3a37ae154311d943557448d8862dbb.png](https://i-blog.csdnimg.cn/blog_migrate/24d2b4d1a0cb8d4e78e53088c69e2519.jpeg)
(4)引擎(Engine)
Engine元素在Service中有且只有一个,Engine是Service中的请求处理组件,Engine从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
Engine中的name属性值可以进行修改,Engine有多个Host。
![cacebf8c8af601f0190c26b8fde20d8c.png](https://i-blog.csdnimg.cn/blog_migrate/27e98c6dfb69060b02433606617e1776.jpeg)
(5)主机(Host)
Host元素定义了一个虚拟主机,它可以包含一个或多个Web应用;
其中属性appBase指定虚拟主机的目录,可以使绝对路径也可以是相对路径;默认值为/webapps。
其中name属性值必须与EnginedefaultHost属性值一致。
其中unpackWARs属性:属性值为true,表示将把Web应用的war文件先解压为开放目录结构后再运行。如果设为false,将直接运行war文件。
其中autoDeploy属性:属性值为true,表示当Tomcat服务器处于运行状态时,能够监测appBase下的文件,如果有新的Web应用加入进来,会自动发布这个Web应用。
![27610c8013523b9d9bec936c380a7c61.png](https://i-blog.csdnimg.cn/blog_migrate/d534906d5efa43cfce9f3a46a28fa76c.jpeg)
(6)上下文(Context)
Context元素代表了运行在虚拟主机上的Web应用,一个元素中可以包含多个元素。
![747ed25618007dfd9fc54bd6e0945134.png](https://i-blog.csdnimg.cn/blog_migrate/3a300131d382ba39916634dda3dfebdc.jpeg)
属性docBase:该属性值表示Web应用在服务器上文件路径,可以为绝对路径,也可以为相对于Host的appBase属性的相对路径。
属性path:该属性值指定访问该Web应用的URL。
属性reloadable:该属性值设为true时,在Tomcat服务器运行状态下会监视在WEB-INF/class和WEB-INF/lib目录下CLASS文件的改动,如果检测到有calss文件被更新,服务器会自动重新加载Web应用。
需要注意的是:
1.一个Server下可以有多个Service,设置两个service可以参照以下步骤:
1)修改第二个Service元素的name属性值为Catalina2
2)修改Connector元素的port属性值,不能出现重复
3)修改Engine元素的name属性值为Catalina2(与Service的name属性值保持一致)
4)修改Host元素的appBase属性值为webapps2
5)创建目录
a)tomcat安装路径/conf/下,创建目录Catalina2/localhost;
b)tomcat安装路径下,创建webapps2
c)将tomcat安装路径/webapps/下ROOT文件夹复制到webapps2目录下
2.如果在一个tomcat下,配置了多个service,那么需要修改tomcat的内存参数,以免内存溢出
(1)Linux系统
打开tomcat安装路径bin下的catalina.sh,在cygwin=false前,添加如下内容,参数值根据服务器情况进行修改。
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
(2)Windows系统
对于解压版tomcat,在安装目录bin下,打开catalina.bat文件,在set "CURRENT_DIR=%cd%"下,添加如下内容:
set JAVA_OPTS=-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true
3.当在同一台主机启动多个tomcat时
(1)无需设置环境变量CATALINA_HOME,因为多个tomcat启动文件都会在环境变量CATALINA_HOME中寻找,不能正确启动对应tomcat。
(2)多个tomcat的端口不能相同,包括负责http访问的8080端口、负责关闭tomcat的8005端口、负责JK连接的8009端口。
4.客户端的请求主要经历了哪些组件
(1)首先通过Connector组件的协议和端口
(2)然后通过Host组件的域名或IP地址
(3)最后通过Context组件的web应用的文件路径
#学问分亨官##闪光时刻第二期主题征文#