4_Tomcat的server_xml文档

本文深入解析Tomcat服务器的内部架构,详细介绍了Server、Service、Connector、Engine和Host等核心组件的功能与工作原理,以及它们之间的关系,帮助读者理解Tomcat如何处理请求。
  • 参考了(https://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&mid=2247486211&idx=1&sn=9af18f0057fe72f3507605d6e9519e7e&chksm=eb538e35dc24072323183ff9425885270dd7d8d51d118d86608fe24929e207c3ad7deb879336&scene=21#wechat_redirect “Tomcat 的 Server 文件配置详解!”)这篇文章

  • 在conf目录下

  • 结构(从顶层到底层)

    (1) Server: 根元素

    (2) Service: 代表一个Engine元素以及一组与之相连的Connector元素

      A "Service" is a collection of one or more "Connectors" that share a single "Container"
    

    (3) Connector: 连接器,代表了外部客户端发送请求到特定Service的接口;同时也是外部客户端从特定Service接收响应的接口

      A "Connector" represents an endpoint by which requests are received and responses are returned.
    

    注:在server.xml中可以看到一大堆Connector元素,有些被注释掉了,每个代表一种类型的接口

      <!-- A "Connector" represents an endpoint by which requests are received
       and responses are returned. Documentation at :
       Java HTTP Connector: /docs/config/http.html
       Java AJP  Connector: /docs/config/ajp.html
       APR (HTTP/AJP) Connector: /docs/apr.html
       Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
      -->
      <Connector port="8080" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" />
    
      <!-- A "Connector" using the shared thread pool-->
      <!--
      <Connector executor="tomcatThreadPool"
             port="8080" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" /> 
    

    (4) Engine:容器,处理Connector接收进来的请求,并产生相应的响应

      An Engine represents the entry point (within Catalina) that processes every request.  The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host).    
    

    (5) 它们几个的关系

      <Server>
        <Service>
          <Connector>
          <Engine>
            <Host>
    
  • 核心组件

    (1) Server

    1° Server元素在最顶层,代表整个Tomcat容器,因此它必须是server.xml中__唯一__一个最外层的元素。

    2° 一个Server元素中可以有__一个或多个Service元素__。

    3° 示例

      <Server port="8005" shutdown="SHUTDOWN">
    

    shutdown属性表示关闭Server的指令;port属性表示Server接收shutdown指令的端口号,设为-1可以禁掉该端口。

    4° Server的主要__任务__,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。

    (2) Service

    1° Service的__作用__,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。

    2° 一个Service可以包含__多个Connector__,但是只能包含__一个Engine__;

    其中__Connector的作用__是从客户端接收请求;

    __Engine的作用__是处理接收进来的请求。

    3° 一个Server可以提供多个Service,不同的Service监听不同的端口

    (3) Connector

    1° Connector的主要__功能__,是__接收连接请求、创建Request和Response对象用于和请求端交换数据__;然后__分配线程__让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。

    2° 通过配置Connector,可以控制请求Service的协议及端口号

    示例

      <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    
      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    

    通过配置第1个Connector,客户端可以通过__8080端口号__使用__http协议__访问Tomcat。其中,protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当要求请求应该是https而到来的请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间;

    在这个例子中,Tomcat监听HTTP请求,使用的是8080端口,而不是正式的80端口;实际上,在正式的生产环境中,Tomcat也常常监听8080端口,而不是80端口。这是因为在生产环境中,很少将Tomcat直接对外开放接收请求,而是在Tomcat和客户端之间加一层代理服务器(如nginx),用于请求的转发、负载均衡、处理静态文件等;通过代理服务器访问Tomcat时,是在局域网中,因此一般仍使用8080端口;

    通过配置第2个Connector,客户端可以通过8009端口号使用AJP协议访问Tomcat。AJP协议负责和其他的HTTP服务器(如Apache)建立连接;在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。之所以使用Tomcat和其他服务器集成,是因为Tomcat可以用作Servlet/JSP容器,但是对静态资源的处理速度较慢,不如Apache和IIS等HTTP服务器;因此常常将Tomcat与Apache等集成,前者作Servlet容器,后者处理静态资源,而AJP协议便负责Tomcat和Apache的连接。

      请求Servlet/JSP
      浏览器 <----HTTP----> Connector <-------> Tomcat服务器
    
      请求静态资源
      浏览器 <----HTTP----> Apache <----AJP----> Connector <-------> Tomcat服务器
    

    (4) Engine

    1° Engine组件在Service组件中__有且只有一个__(但是可以有多个Connector)

    2° Engine是Service组件中的请求处理组件:Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。

    3° 示例

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

    name属性用于日志和错误信息,在整个Server中应该__唯一__;

    defaultHost属性指定了默认的host名称,当发往本机的请求指定的host名称不存在时,一律使用defaultHost指定的host进行处理;因此,defaultHost的值,必须与Engine中的一个Host组件的name属性值匹配。

    (5) Host

    1° Host是Engine的子容器,Engine组件中可以内嵌__1个或多个__Host组件

    2° 每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。

    3° Host虚拟主机的__作用__,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。

    Host组件代表的虚拟主机,对应了服务器中一个网络名实体(如”www.javastack.cn”,或IP地址”116.25.25.25”);为了使用户可以通过网络名连接Tomcat服务器,这个名字应该在DNS服务器上注册。

    客户端通常使用主机名来标识它们希望连接的服务器;该主机名也会包含在HTTP请求头中。Tomcat从HTTP头中提取出主机名(Connector做的),寻找名称匹配的主机。如果没有匹配,请求将发送至默认主机(defaultHost属性设置的)。因此默认主机不需要是在DNS服务器中注册的网络名,因为任何与所有Host名称不匹配的请求,都会路由至默认主机。

    4° 示例

      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    

    name属性指定虚拟主机的主机名,一个Engine中有且仅有一个Host组件的name属性与Engine组件的defaultHost属性相匹配;一般情况下,主机名需要是在DNS服务器中注册的网络名,但是Engine指定的defaultHost不需要,原因在前面已经说明;

    unpackWARs指定了是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用;

    Host的autoDeploy和appBase属性,与Host内Web应用的自动部署有关;此外,本例中没有出现的xmlBase和deployOnStartup属性,也与Web应用的自动部署有关

  • 如何确定请求由谁处理

    (1)根据协议和端口号选定Service和Engine

    Service中的Connector组件可以接收特定端口的请求,因此,当Tomcat启动时,Service组件就会监听特定的端口。在第一部分的例子中,Catalina这个Service监听了8080端口(基于HTTP协议)和8009端口(基于AJP协议)。当请求进来时,Tomcat便可以根据协议和端口号选定处理请求的Service;Service一旦选定,Engine也就确定。

    通过在Server中配置多个Service,可以实现通过不同的端口号来访问同一台机器上部署的不同应用。

    (2)根据域名或IP地址选定Host

    Service确定后,Tomcat在Service中寻找名称与域名/IP地址匹配的Host处理该请求。如果没有找到,则使用Engine中指定的defaultHost来处理该请求。在第一部分的例子中,由于只有一个Host(name属性为localhost),因此该Service/Engine的所有请求都交给该Host处理。

    (3)根据URI选定Context/Web应用

    (4)示例:请求http://localhost:8080/app1/index.html

    首先通过协议和端口号(http和8080)选定Service;

    然后通过主机名(localhost)选定Host;

    然后通过uri(/app1/index.html)选定Web应用。

基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值