在介绍Tomcat架构之前,先来学习下Tomcat核心配置文件Server.xml,下面是一个配置示例
2 核心元素及常用配置 2.1 Server
Tomcat顶层元素,表示一个Tomcat服务实例,代表整个容器。包含一个或多个Service。对应的实现org.apache.catalina.core.StandardServer。
port:监听shutdown命令的端口号。
shutdown:执行shutdown *** 作时,向shutdown监听端口发送的关闭命令字符串。
2.2 ServiceTomcat顶层元素,包含一个或多个Connector、一个Engine,Connector和Engine属于平级关系。Service本身没有做什么重要的事情,只是在连接器和容器外面多包了一层,把它们组装在一起,对外提供服务。Tomcat 内可能有多个 Service,通过在 Tomcat 中配置多个 Service,可以实现通过不同的端口号来访问同一台机器上部署的不同应用。对应的实现org.apache.catalina.core.StandardService。
2.3 Connector请求连接器,接收网络连接请求,读取网络请求字节流,根据具体的应用层协议(HTTP/AJP)解析字节流,生成统一的 Tomcat Request 对象,并将 Tomcat Request 对象转成标准的ServletRequest,调用Engine来处理这个请求,得到ServletResponse,并转成Tomcat Response对象,然后将对象转成网络字节流写回浏览器。通过配置Connector,可以控制请求Service的协议及端口号。对应的实现org.apache.catalina.connector.Connector。
port:监听网络请求端口号。
protocol:规定了请求协议。
redirectPort:当请求为Https时,重定向到端口号为8443的Connector。
connectionTimeout:连接超时时间(ms)。
minSpareThreads:最小备用线程数,Tomcat启动时的初始化的线程数,默认10。
maxThreads:要创建的请求处理线程的最大数量,即可以处理的最大并发请求数,默认200。
maxConnections:服务器能接受和处理的最大连接数,BIO模式下默认为maxThreads,NIO模式下默认10000。当达到最大值时,连接请求会被放到一个请求队列,请求队列默认最大值为acceptCount参数值。
acceptCount:maxConnections达到最大值时,新请求会被存到一个请求队列中,此参数就是该请求队列的长度,当队列塞也被满后,后续收到的任何请求都将被拒绝, 默认大小为100。
2.4 EngineTomcat容器元素,Engine组件在Service组件中有且只有一个,Engine是Service组件中的请求处理组件,Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。对应的实现org.apache.catalina.core.StandardEngine。
name:Engine组件名称,用于记录日志和错误信息。
defaultHost:指定默认的host名称,当发往本机的请求指定的host名称不存在时,一律使用defaultHost指定的host进行处理,因此defaultHost的值,必须与Engine中的一个Host组件的name属性值匹配。
2.5 HostTomcat容器元素,Engine至少包含一个或多个Host。每个Host定义了一个虚拟主机,它可以包含一个或多个Web应用,其中一个Host的name必须与Engine组件的defaultHost属性相匹配。对应的实现org.apache.catalina.core.StandardHost。
name:虚拟主机的主机名,忽略大小写(初始化时会自动转换为小写)。可以使用前缀星号通配符,如:"*.a.com"。使用了星号前缀的虚拟主机的匹配优先级低于精确名称的虚拟主机。
appbase:此Host的webapps目录,即webapp部署在此虚拟主机上时的存放目录。可以指定绝对目录,也可以指定相对于
unpackWARs:如果此项设为true,表示将把Web应用的war文件先解压为开放目录结构后再运行。如果为false将直接执行war文件。
autoDeploy:如果此项设为true,表示当Tomcat服务器处于运行状态时,监测appbase下的文件,如果有新的web应用加入进来,会自动部署这个Web应用。
2.6 ContextTomcat容器元素,每个Context代表了一个运行在虚拟主机上的Web应用,一个Host中可以包含多个Context。对应的实现org.apache.catalina.core.StandardContext。现在一般使用Web应用自动部署,不配置Context元素。
path:定义webapp访问URL, 可以为path="/“或path=”"。
docbase:指定Web应用的文件路径,可以为绝对路径,也可以为相对于Host的appbase属性的相对路径。如果Web应用采用开放目录结构,那就指定Web应用的根目录。如果Web应用是个WAR文件,那就指定WAR文件的路径。
reloadable:如果属性设为true,Tomcat服务器在运行状态下会监听在WEB-INF/class和WEB-INF/lib目录下class文件的改动,如果检测到有calss文件被更新,服务器会自动重新加载Web应用。
3 Tomcat架构设计与xml 3.1 Tomcat架构图以上介绍了server.xml核心元素及常用配置,如果想要了解更多信息可以访问:Tomcat官网
先贴一张Tomcat整体架构设计图:
从架构图可以发现,Tomcat设计的组件和server.xml中的节点元素是相互对应的。Tomcat启动时会解析server.xml元素来初始化组件。Tomcat采用了高度组件化的设计,很好的遵循了高内聚、低耦合的设计规范,使得Servlet容器具有很好的灵活性。
高内聚:指相关度比较高的功能要尽可能集中,不要分散。
低耦合:指两个相关的模块要尽可能减少依赖的部分和降低依赖的程度,不要让两个模块产生强依赖。
Tomcat中最重要的两类组件:Connector(连接器)、容器组件。
连接器:负责对外交流,处理Socket连接,读取网络字节流,并转化为标准的ServletRequest和ServletResponse对象。
容器组件:包含Engine、Host、Context和Wrapper负责内部处理,加载和管理Servlet,以及具体处理 Request 请求。
- Context 表示一个 Web 应用程序
- Wrapper 表示一个 Servlet,一个 Web 应用程序中可能会有多个 Servlet
- Host 代表的是一个虚拟主机,或者说一个站点,可以给 Tomcat 配置多个虚拟主机地址,而一个虚拟主机下可以部署多个 Web 应用程序
- Engine 表示引擎,用来管理多个虚拟站点,一个 Service 最多只能有一个 Engine
以请求http://www.test1.com:8080/sample1/controller/viewData为例
- 当请求过来时,根据协议(http)和端口号(8080)确定使用哪个Connector,也就确定了Service和Engine(容器)
- 接着根据域名(www.test.com)确定对应容器下哪个Host
- 然后根据URL路径(/sample)找到对应的Context
- Context确定后,最后再根据web.xm配置的Servlet 映射路径(/controller/viewData)找到具体的Wrapper即Servlet
详解Tomcat 配置文件server.xml
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)