接收的到的Socket请求怎么转换成servletRequest
前面 ,我们已经知道Tomcat怎么抓住从客户端传过来的请求,那么接下来就来看看,客户端传过来的
请求(Socket)怎么一步步包装成servletReqest , 以及如何调用相应servlet。
Http11Process :
processer.process(socket); --- coyote.Request
coyoteAdapter.service(request , response) ; -- - connector.Request
这一部分就不贴源码了,太多了== 。
下面这些 来自 : http://www.uml.org.cn/j2ee/201306285.asp
用户的一个请求会经过n个环节的处理,最后到达开发人员写的Servlet,传给Servlet也就是HttpServletRequest和HttpServletResponse,因此可以认为这一路走下来无非就是把最原始的Socket包装成Servlet里用到的HttpServletRequest和HttpServletResponse,只不过每个环节完成的包装功能和部分不一样而已,信息流如下图所示:
Request与Response的类图如下所示
Socket 先是被包装成coyote.Request
下面结合一次完整请求的时序图来看看从Socket到org.apache.catalina.connector.Request的加工过程:
coyoteAdapter : org.apache.catalina.connector;
在StanardWrappervalue中,就会形成一条过滤器链,然后通过调用diFiltere()方法,直到调用到servlet
更加详细的过程可以参考上传的文件!!!来自Tomcat自带的docs
接下来,想深入的研究下pipeline 和 value;