Tomcat组件及对应配置详解

1.概述

Tomcat是一个基于JAVA的WEB容器,其实现了JAVA EE中的 Servlet 与 jsp 规范,与Nginx apache 服务器不同在于一般用于动态请求处理。在架构设计上采用面向组件的方式设计。即整体功能是通过组件的方式拼装完成。另外每个组件都可以被替换以保证灵活性。Tomcat中的组件包含Server、Service、Connector、Engine、Host及Context。
在这里插入图片描述

2.组件及其配置详解

2.1 顶层组件Service

Tomcat中最顶层的容器是Server,代表着整个服务器,整个 Tomcat 的生命周期由 Server 控制。

<Server port="8005" shutdown="SHUTDOWN">
	<Service name="Catalina">
	
	<Connector port="">
	</Connector>
	
	<Engine name="Catalina">
		<Host>
			<!-- 一般有单独的context配置文件 -->
			<Context></Context>
		</Host>
	</Engine>
	</Service>
</Server>

server是root元素:server 的顶级配置
主要属性:
port:执行关闭命令的端口号
shutdown:关闭命令
例如给上面配置中发送关闭指令:telent 127.0.0.1 8005 SHUTDOWN

2.2 服务组件Service

从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service层主要用于聚合一个Engine和多个Connector,对外提供服务。Service本身不是一个容器,它的配置很简单,,可以配置多个服务。

	<Service name="Catalina">
	</Service>
	<Service name="qqxhb">
	</Service>

2.3 连接器 Connector

用于接收 指定协议下的连接请求并将请求封装成Request和Response ,指定给唯一的Engine 进行处理。首先经过Service然后会交给我们的Connector,Connector用于接收请求并将接收的请求封装为Request和Response来具体处理,Request和Response封装完之后再交由Engine 进行处理,Engine 处理完请求之后再返回给Connector,最后在由Connector通过Socket将处理的结果返回给客户端,这样整个请求的就处理完了!
Connector最底层使用的是Socket来进行连接的,Request和Response是按照HTTP协议来封装的,所以Connector同时需要实现TCP/IP协议和HTTP协议!一个Service可以有多个Connector。

 	<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
               
    <Connector executor="tomcatThreadPool"
               port="8090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

连接器:用于接收 指定协议下的连接 并指定给唯一的Engine 进行处理。
主要属性:
protocol 监听的协议,默认是http/1.1
port 指定服务器端要创建的端口号
minThread 服务器启动时创建的处理请求的线程数
maxThread 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(以毫秒为单位)
SSLEnabled 是否开启 sll 验证,在Https 访问时需要开启。

2.4 引擎 Engine

Engine用于处理连接的执行器,负责封装和管理Servlet,以及具体处理Request请求,默认的引擎是catalina。一个service 中只能配置一个Engine。在Engine内部包含了4个子容器:1)Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;2)Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;3)Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;4)Wrapper:每一Wrapper封装着一个Servlet。

<Engine name="Catalina" defaultHost="localhost">
</Engin>

用于处理连接的执行器,默认的引擎是catalina。一个service 中只能配置一个Engine。
主要属性:
name:引擎名称
defaultHost:默认host
详细文档请参考:https://tomcat.apache.org/tomcat-8.5-doc/config/engine.html

2.5 虚拟主机Host

基于域名匹配至指定虚拟机。类似于nginx 当中的server,默认的虚拟机是localhost。
一个或多个Host元素嵌套在 Engine元素内。在Host元素内,可以为与此虚拟主机关联的Web应用程序嵌套Context元素。必须有一个主机的名称和引擎中defaultHost属性的名称 一种。


<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
	<!-- 阀门:可以理解成request 的过滤器,具体配置要基于具体的Valve 接口的子类。以下即为一个访问日志的Valve-->
	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

appBase
此虚拟主机的Application Base目录,该目录包含要在此虚拟主机上部署的Web应用程序。可以指定绝对路径名,也可以指定相对于CATALINA_BASE目录的路径名 。如果未指定,webapps将使用默认值 。
xmlBase
此虚拟主机的XML Base目录。这是目录的路径名,其中可能包含要在此虚拟主机上部署的上下文XML描述符。同样可以是相对或者绝对路径,如果未指定,将使用默认值(conf/engine_name/host_name)。
createDirs
如果设置为true,Tomcat将尝试在启动创建由属性appBase和xmlBase定义的目录。默认值为true。如果设置为true,在目录创建失败,将显示一条错误消息,但不会停止启动顺序。
autoDeploy
该标志值指示在Tomcat运行时Tomcat是否应定期检查新的或更新的Web应用程序。如果为true,则Tomcat会定期检查appBase和xmlBase 目录,并部署找到的任何新的Web应用程序或上下文XML描述符。如果有更新的Web应用程序或上下文XML描述符将触发Web应用程序的重新加载。标志的值默认为true。
deployIgnore
一个正则表达式,定义忽略autoDeploy和deployOnStartup设置时的路径 。
deployOnStartup
此标志值指示在Tomcat启动时是否应自动部署来自该主机的Web应用程序,默认为true。
name
通常,此虚拟主机的网络名称(在您的域名服务服务器中注册) 。不管用于指定主机名的大小写如何,Tomcat都会在内部将其转换为小写形式。嵌套在引擎中的主机之一的名称必须与该defaultHost引擎的设置匹配。
startStopThreads
该主机 用于并行启动子上下文元素的线程数。如果正在使用自动部署,则将使用相同的线程池来部署新的 Context。如果设置为0,则采用 Runtime.getRuntime().availableProcessors();如果未指定,将使用默认值1。
copyXML
应用启动时是否需要复制单独的context.xml文件到xmlbase指定路径中,默认值false。
unpackWARs
应用启动时是否需要解压war包到appBase路劲下。
更详细的配置请参考:https://tomcat.apache.org/tomcat-8.5-doc/config/host.html

2.6 应用上下文 Context

一个host 下可以配置多个Context ,每个Context 都有其独立的classPath,代表一个应用程序。每个Context的 ClassLoader都是独立相互隔离,以免造成ClassPath 冲突。

<Context docBase="hello" path="/h" reloadable="true"/>

docBase
应用程序路径,可以是相对路径或者绝对路径
path
上下文访问路径即URL访问的区分路径,必须唯一。如上面的访问路径为域名/h
reloadable
是否需要引擎自动检测应用程序的更新,默认为false。
更详细的请参考https://tomcat.apache.org/tomcat-8.5-doc/config/context.html

其他相关文章:
生产环境下到底该如何部署Tomcat?
让面试官颤抖的Tomcat系统架构系列!

发布了131 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43792385/article/details/105361019