
文章插图
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将对象解析为字节流发送给客户端

文章插图
作者:不学无数的程序员
链接:https://juejin.im/post/5d007570f265da1b8b2b5671
【Tomcat是如何运行的?整体架构又是怎样的?】
推荐阅读
- 湖北绿茶,喝绿茶好还是茉莉茶好
- 湄潭毛尖,毛尖是什么
- 哪个牌子是真德绒 德绒发热内衣真的保暖吗
- 抖音如何选品 抖音带货哪里选商品
- TimingWheel 时间轮算法是如何实现的?
- 如何在Java中创建不可变类?
- 清香型铁观音,清香型铁观音是什么茶
- 清雍正紫砂圆壶,如何养紫砂茶壶
- 涌溪火青,教你如何更加全面的辨别茶叶的好坏
- 浙江安吉白茶,浙江安吉白茶是什么茶
