Tomcat是如何运行的?整体架构又是怎样的?( 二 )


Tomcat是如何运行的?整体架构又是怎样的?

文章插图
 
Tomcat中容器所有模块都实现了Container接口,而组合模式的意义就是使得用户对于单个对象和组合对象的使用具有一致性,即无论添加多少个Context其使用就是为了找到其下面的Servlet,而无论添加多少个Host也是为了找个下面的Servlet 。而在容器中设计了这么多的模块,一个请求过来Tomcat如何找到对应的Servlet进行处理呢?
请求如何定位我们就举个最简单的例子,我们本机应用上启动了一个Tomcat,webapp下有我们部署的一个应用buxuewushu 。我们在浏览器上输入http://localhost:8080/buxuewushu/add.do是如何找到对应Servlet进行处理呢?
在我们启动Tomcat的时候,连接器就会进行初始化监听所配置的端口号,这里我们配置的是8080端口对应的协议是HTTP 。
  • 请求发送到本机的8080端口,被在那里监听的HTTP/1.1的连接器Connector获得
  • 连接器Connector将字节流转换为容器所需要的ServletRequest对象给同级Service下的容器模块Engine进行处理
  • Engine获得地址http://localhost:8080/buxuewushu/add 。匹配他下面的Host主机
  • 匹配到名为localhost的Host(就算此时请求为具体的ip,没有配置相应的Host,也会交给名为localhost的Host进行处理,因为他是默认的主机)
  • Host匹配到路径为/buxuewushu的Context,即在webapp下面找到相应的文件夹
  • Context匹配到URL规则为*.do的servlet,对应为某个Servlet类
  • 调用其doGet或者doPost方法
  • Servlet执行完以后将对象返回给Context
  • Context返回给Host
  • Host返回给Engine
  • Engine返回给连接器Connector
  • 连接器Connector将对象解析为字节流发送给客户端

Tomcat是如何运行的?整体架构又是怎样的?

文章插图
 
作者:不学无数的程序员
链接:https://juejin.im/post/5d007570f265da1b8b2b5671

【Tomcat是如何运行的?整体架构又是怎样的?】


推荐阅读