美文网首页框架原理
Tomcat是如何响应我们的请求的

Tomcat是如何响应我们的请求的

作者: 简书徐小耳 | 来源:发表于2019-01-17 15:56 被阅读7次
    • 1.我们知道我们是通过coyoteAdapter来让request开始整个cotainer容器之旅的
    • 2.其中的响应结果封装再response中,注意这边的请求和响应都是HttpServletRequest和HttpServletResponse
    • 3.当我们得到response之后通过finishResponse这方法来响应客户端
    • 4.而对于异步处理 则会返回 SocketState.LONG; 其会在我们的poller里面的selector上注册一个read事件
    • 5.将当前处理这个异步请求的processor缓存在waitingProcessors中
    • 6.当处理完成之后selector会捕捉到事件最终还是调用response的finishResponse去响应

    而具体的响应逻辑则:
    调用StandardHostValve的status方法
    其内部会根据response的响应码做一些操作
    最终调用了 org.apache.catalina.connector.Response(javax.servlet.http.HttpServletResponse的子类)的finishResponse方法

    其会调用 OutputBuffer (java.io.Writer的子类)的close方法
    该方法会关闭outputbuffer,同时将buffer中剩余的数据flush出去,同时调用
    org.apache.coyote.Response的action方法
    根据该方法的参数不同执行不同的逻辑
    比如有COMMIT,CLOSE,ACK,CLIENT_FLUSH,AVAILABLE,REQ_SET_BODY_REPLAY,IS_ERROR,
    CLOSE_NOW,DISABLE_SWALLOW_INPUT等
    我们的响应就是CLOSE,最终调用的是Http11OutputBuffer的finishResponse
    其底层使用了我们的selectorPool来协助

    相关文章

      网友评论

        本文标题:Tomcat是如何响应我们的请求的

        本文链接:https://www.haomeiwen.com/subject/vamidqtx.html