SpringBoot调用流程源码(十九)tomcat的启动(九)请求进来的流程

本文深入探讨SpringBoot应用接收到HTTP请求后的处理流程,从NioEndPoint的SocketProcessor开始,详细讲解Http11Processor如何处理请求,转换成CoyoteAdapter,然后在Tomcat的管道中执行,最后进入Spring的Filter链。文中还包含管道执行顺序及相关的序列图分析。
摘要由CSDN通过智能技术生成

当一个请求访问springboot的接口的时候,会被Nio的selector轮询到

一、入口

轮询的方法是在NioEndPoint端点的内部类SocketProcessor类中的doRun()方法,然后进入如下方法中

state = getHandler().process(socketWrapper, event);

然后进入Http11Processor类的process方法中,因为请求进来,先进行读操作,所以先进入如下方法:

} else if (status == SocketEvent.OPEN_READ){
                state = service(socketWrapper);

这个方法进入后,前面先进行一通判断,如果没有错误的话,进入如下代码:

            if (!getErrorState().isError()) {
                try {
                    rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
                    getAdapter().service(request, response);

这个adapter就是我们之前说过的CoyoteAdapter,它的作用跟之前介绍的一样,是为了将tomcat的request,response转为spring的HttpServletRequest,HttpServletResponse。如果转换成功,则进入tomcat的管道,依次执行tomcat中管道的工作:

            if (postParseSuccess) {
                //check valves if we support async
                request.setAsyncSupported(
                        connector.getService().getContainer().getPipeline().isAsyncSupported());
                // Calling the container
                connector.getService().getContainer().getPipeline().getFirst().invoke(
                        request, response);
            }

二、管道

tomcat的管道常规情况按如下顺序执行:

StandardEngineValve
ErrorReportValve
StandardHostValve
StandardContextValve
StandardWrapperValve

三、Filter

执行完管道任务后,就通过tomcat的ApplicationFilterChain类进入了spring的fiter中,开始执行spring的filter了。

四、序列图

其序列图如下:

NioEndPoint$SocketProcessor SocketProcessor AbstractProcessorLight Http11processor CoyoteAdapter StandardEngineValve doRun() process() service() service() invode() 管道和filter后面的序列就比较简单,此处不写了 NioEndPoint$SocketProcessor SocketProcessor AbstractProcessorLight Http11processor CoyoteAdapter StandardEngineValve
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值