Tomcat-架构介绍和Server.xml

Tomcat-架构介绍和Server.xml,第1张

Tomcat-架构介绍和Server.xml 1 配置文件

在介绍Tomcat架构之前,先来学习下Tomcat核心配置文件Server.xml,下面是一个配置示例


  
  
  
  
  
  

  
    
  

  
    
    
    
      
        
      

      
        
        
          
                   
      
    
  

2 核心元素及常用配置 2.1 Server

Tomcat顶层元素,表示一个Tomcat服务实例,代表整个容器。包含一个或多个Service。对应的实现org.apache.catalina.core.StandardServer。


port:监听shutdown命令的端口号。

shutdown:执行shutdown *** 作时,向shutdown监听端口发送的关闭命令字符串。

2.2 Service

Tomcat顶层元素,包含一个或多个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 Engine

Tomcat容器元素,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 Host

Tomcat容器元素,Engine至少包含一个或多个Host。每个Host定义了一个虚拟主机,它可以包含一个或多个Web应用,其中一个Host的name必须与Engine组件的defaultHost属性相匹配。对应的实现org.apache.catalina.core.StandardHost。


name:虚拟主机的主机名,忽略大小写(初始化时会自动转换为小写)。可以使用前缀星号通配符,如:"*.a.com"。使用了星号前缀的虚拟主机的匹配优先级低于精确名称的虚拟主机。

appbase:此Host的webapps目录,即webapp部署在此虚拟主机上时的存放目录。可以指定绝对目录,也可以指定相对于的相对目录, 如果此项没有设定,默认值为/webapps。

unpackWARs:如果此项设为true,表示将把Web应用的war文件先解压为开放目录结构后再运行。如果为false将直接执行war文件。

autoDeploy:如果此项设为true,表示当Tomcat服务器处于运行状态时,监测appbase下的文件,如果有新的web应用加入进来,会自动部署这个Web应用。

2.6 Context

Tomcat容器元素,每个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应用。

以上介绍了server.xml核心元素及常用配置,如果想要了解更多信息可以访问:Tomcat官网

3 Tomcat架构设计与xml 3.1 Tomcat架构图

先贴一张Tomcat整体架构设计图:

从架构图可以发现,Tomcat设计的组件和server.xml中的节点元素是相互对应的。Tomcat启动时会解析server.xml元素来初始化组件。Tomcat采用了高度组件化的设计,很好的遵循了高内聚、低耦合的设计规范,使得Servlet容器具有很好的灵活性。

高内聚:指相关度比较高的功能要尽可能集中,不要分散。

低耦合:指两个相关的模块要尽可能减少依赖的部分和降低依赖的程度,不要让两个模块产生强依赖。

Tomcat中最重要的两类组件:Connector(连接器)、容器组件。

连接器:负责对外交流,处理Socket连接,读取网络字节流,并转化为标准的ServletRequest和ServletResponse对象。

容器组件:包含Engine、Host、Context和Wrapper负责内部处理,加载和管理Servlet,以及具体处理 Request 请求。

  1. Context 表示一个 Web 应用程序
  2. Wrapper 表示一个 Servlet,一个 Web 应用程序中可能会有多个 Servlet
  3. Host 代表的是一个虚拟主机,或者说一个站点,可以给 Tomcat 配置多个虚拟主机地址,而一个虚拟主机下可以部署多个 Web 应用程序
  4. Engine 表示引擎,用来管理多个虚拟站点,一个 Service 最多只能有一个 Engine
3.2 一个请求如何访问Servlet

以请求http://www.test1.com:8080/sample1/controller/viewData为例

  1. 当请求过来时,根据协议(http)和端口号(8080)确定使用哪个Connector,也就确定了Service和Engine(容器)
  2. 接着根据域名(www.test.com)确定对应容器下哪个Host
  3. 然后根据URL路径(/sample)找到对应的Context
  4. Context确定后,最后再根据web.xm配置的Servlet 映射路径(/controller/viewData)找到具体的Wrapper即Servlet
4 参考链接

详解Tomcat 配置文件server.xml

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5681242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存