tomcat请求处理分析(五) 请求到响应流

本文深入分析了Tomcat处理HTTP请求到生成响应的流程,涉及关键步骤如线程池的使用、Http11Processor的创建、内部缓冲流的构建以及数据如何通过Socket通道返回到客户端。通过对SocketProcessor、Http11Processor和OutputBuffer等组件的详细讲解,揭示了请求响应过程中的数据流动路径。
1.1.1.1  请求到响应界面流

请求处理的过程主要是将所有的东西解析成流,转化成对应的http报文,所以在这里我先不关注servlet因为它最终也就是解析成流里面的数据

processKey里面最终执行的是processSocket,它是线从缓存中获取对应的线程池,没有的话就创建一个,然后进行执行

protected boolean processSocket(KeyAttachmentattachment, SocketStatus status, boolean dispatch) {
   
try {
       
if (attachment== null) {
           
return false;
       
}
        SocketProcessor sc =
processorCache.pop();
        if
( sc == null ) sc = new SocketProcessor(attachment, status);
        else
sc.reset(attachment, status);
       
Executor executor =getExecutor();
        if
(dispatch &&executor != null) {
            executor.execute(sc)
;
       
} else {
            sc.run()
;
       
}
    }
catch (RejectedExecutionExceptionree) {
       
log.warn(sm.getString("endpoint.executor.fail", attachment.getSocket()), ree);
        return false;
   
} catch (Throwablet) {
        ExceptionUtils.handleThrowable(t)
;
       
// This means we got anOOM or similar creating a thread, or that
        // the pool and its queue arefull
       
log.error(sm.getString("endpoint.process.fail"), t);
        return false;
   
}
   
return true;

}
    在上面描述的线程中,响应到页面主要是先构建对应的缓冲流,然后将缓冲流中的数据写入到sockt通道,这样就实现到了页面,具体操作逻辑如下:(自下向上执行)

   下面我将与流相关的几步,进行一下讲述:

process:,AbstractProtocol$AbstractConnectionHandler (org.apache.coyote)

 

if (processor == null) {
    processor = createProcessor()
;

}

 

protected Http11Processor createProcessor() {
    Http11Processor processor =
new Http11Processor(
           
proto.getMaxHttpHeaderSize(), (JIoEndpoint)proto.endpoint,
           
proto.getMaxTrailerSize(), proto.getAllowedTrailerHeadersAsSet(),
           
proto.getMaxExtensionSize(), proto.getMaxSwallowSize());
   
proto.configureProcessor(processor);
   
// BIO specificconfiguration
   
processor.setDisableKeepAlivePercentage(proto.getDisableKeepAlivePercentage());
   
register(processor);
    return
processor;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值