Tomcat 如何根据请求路径信息匹配相应的Servlet

Mapper组件

  在 Apache Tomcat 中,Mapper 组件是请求处理过程中的一个重要部分,它负责将 HTTP 请求的 URL 映射到相应的 Servlet 或 JSP。

  Mapper作为Tomcat的一个组件其是封装在MapperListener的属性中,而MapperListener实现了Lifecycle接口,其生命周期中会存在不同的状态。比较重要的是mapperListener.start()方法的执行,该方法会将Tomcat中的host(域名 默认为localhost),context(项目),wrapper(servlet)组件进行一个映射保存。这样请求到达Tomcat服务器后,将请求路径按照域名,项目名称,servlet进行拆分,然后根据映射逐层寻找,最终找到目标servlet,然后执行其service方法。具体流程如下:

  假如请求为localhost:8080/test/helloWord/index.do,那么其是如何找到为其服务的servlet呢,具体流程如下:

  1:从请求中我们可以解析出host组件对应的name为localHost,context组件对应的path为test  剩余的helloWord/index.do即为servlet对应的<url-pattern> 。

  2:循环遍历MappedHost[]数据,从中找出name为localHost的MappedHost。

  3:获取MappedHost中的ContextList对象中的MappedContext[]数据,循环遍历找到path为test对应的MappedContext。

  4:获取MappedContext中的ContextVersion[]数据,根据相应的版本信息获取到对应版本的ContextVersion对象,一般情况只有一个ContextVersion对象,除非使用了多版本。

  5:根据servlet对应的<url-pattern>的样式选择ContextVersion中4个集合的某一个符合条件的集合,从而获取到一个MappedWrapper集合。

  6:对<url-pattern>按照规则进行处理得到相应的name信息,循环遍历MappedWrapper集合,将name符合的wrapper信息获取到,而wrapper中封装了servlet,从而找到了相应请求的servlet。

  如果您希望更深入地学习Tomcat源码,我强烈推荐您访问以下项目链接:https://gitee.com/chengyadong555/tomcat.git。在这个项目中,您将发现对Tomcat源码的逐行分析,作者不仅提供了丰富的注释,还融入了自己独到的理解和见解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值