Tomcat源码学习之--接口请求之路

用户请求

以现在微服务请求的方式,用户一般上网操作都是通过手机、网页等各种方式点击操作,这时候服务器会根据不同的请求分别转发至后面各个对应的服务上,最简单的就是如图所示,只有一个服务器A,服务器B.

两个程序分别部署在对应的服务器A和服务器B上,那么请求发起如A服务请求至B服务时,请求路径是什么样子的?tomcat是怎么实现服务器A到B的请求

应用部署

一般的web项目部署到Tomcat容器的方式有三种:

  1. war包
  2. 文件夹形式

一般情况下我们都会选择前两种,把应用程序打成对应的war包或者文件夹形式放在Tomcat的webapps文件夹下进行启动。

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
    <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:应用部署目录
  • unpackWARs:自动解压war包,使用解压后对应的文件夹
  • autoDeploy:热部署
  • Value标签表示这个虚拟主机下的日志存放的地址
  1. Xml描述方式部署
<Context path="/Helloworld" relaodable="false" docBase="D:\IdeaProjects\Demo\target\classes">
</Context>
  • path : 访问项目的路径
  • relaodable : tomcat会持续监测Javabean,一旦发现Javabean源文件改动,服务器立即重启
  • docBase : 应用所在的文件夹/war包对应的路径(不受限制),如果docBase如果是空,表示项目没用
    tomcat不支持jar包部署,在webapps目录下,一个文件夹代表一个应用,假设在webapps下放入一个jar时,tomcat无法试别到底是依赖的jar包还是服务应用

发起请求

  1. 应用程序根据对应业务生成和组装业务数据
  2. 建立连接
    根据业务需要,组装符合http协议的数据
  • http协议是应用层协议,它不关心数据传输,主要关心的是数据格式,一个http协议包括请求行,请求头,请求体
  • http应用层向下传输到了TCP/UDP
    操作系统有tcp_connect()方法。应用程序通过操作系统提供的socket接口调用建立tcp连接

3.传输送数据

Connector标签对应的实现类Connector,Connector标签定义了对应的协议,类里面定义了Endpoint对应的抽象类AbstractEndpoint,AbstractEndpoint对应的实现类有AprEndpoint(apache,JIoEndpoint(BIO), NioEndpoint(Nio)

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

tomcat通过socket传输,根据不同协议进行解析为Request,然后tomcat通过Endpoint组件来接受Socket的连接。

Tomcat7里NIO和BIO都存在,默认是BIO。Tomcat 8以后主要把NIO改为默认,BIO去掉了

tomcat通过Connector处理相关请求。Connector使用ProtocolHandler处理器来处理请求。不同的ProtocolHandler代表不同连接类型。

  1. Tomcat容器
  • Tomcat是一个servlet容器
  • Context所谓的容器主要是指继承Container(容器),Container继承Lifecycle(生命周期),Container有4个实现接口,分别是Host,Context, Engine, Wrapper
<Context path="/HelloWord" relaodable="false" docBase="D:\IdeaProjects\Demo\target\classes"/>

  • 通过server.xml知道,Context是Host下的一个子节点,Host节点表示tomcat内部的虚拟主机,如果虚拟主机没找到,默认找localhost。Engine是host的上一级容器,用于管理Host。Wrapper在context之后,Context管理多个Wapper,Wrapper管理多个servlet


    1639724545(1).jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容