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

本文详细阐述了在微服务架构中,用户如何通过Tomcat容器进行请求转发,包括war包部署、XML配置、HTTP协议的应用、以及Tomcat的Connector、Endpoint和servlet容器的角色。重点讲解了Tomcat如何处理请求并管理虚拟主机和连接类型。
摘要由CSDN通过智能技术生成

用户请求

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值