接收的到的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,只不过每个环节完成的包装功能和部分不一样而已,信息流如下图所示:

   接收的到的Socket请求怎么转换成servletRequest_第1张图片

  Request与Response的类图如下所示

  接收的到的Socket请求怎么转换成servletRequest_第2张图片

Socket 先是被包装成coyote.Request

 

下面结合一次完整请求的时序图来看看从Socket到org.apache.catalina.connector.Request的加工过程:

coyoteAdapter : org.apache.catalina.connector;

接收的到的Socket请求怎么转换成servletRequest_第3张图片

在StanardWrappervalue中,就会形成一条过滤器链,然后通过调用diFiltere()方法,直到调用到servlet

 更加详细的过程可以参考上传的文件!!!来自Tomcat自带的docs

  接下来,想深入的研究下pipeline 和 value;

你可能感兴趣的:(servlet)