一、前言
介绍网Catalina中Web应用的加载过程,这篇博客再来介绍一下他是如何处理Web应用请求的。
二、总体过程
Tomcat通过org.apache.tomcat.util.http.Mapper维护请求链接与Host、Context、Wrapper等Container映射。同时,通过org.apache.catalina.connector.MapperListener监听器监听所有的Host、Context、Wrapper组件,在相关组件启动、停止时注册或者移除相关映射。
此外,通过org.apache.catalina.connector.CoYoAdapter将Connector与Mapper、Container联系起来,当Connector接收到请求后,首先读取请求数据,然后调用CoyoteAdapter.service()方法完成请求处理。
CoyoteAdapter.service的具体处理过程如下:
(1)根据Connector的请求和响应对象创建Servlet请求和响应。
(2)转换请求参数并且完成请求映射:
- 请求URI解码,初始化请求的路径参数。
- 检测URI是否合法,如果非法,则返回响应码400。
- 请求映射,映射结果保存到org.apache.catalina.connector.Request.,appingData,类型为org.apache.tomcat.util.http.mapper.MappingData,请求映射处理最终会根据URI定位到一个有效的Wrapper。
- 如果映射结果MappingData的redirectPath属性不为空(即为重定向请求),则调用org.apache.catalina.connector.Response.sendRedirect发送重定向并