tomcat源码解读五 Tomcat中Request的生命历程

本文深入探讨了Tomcat中Request的生命周期,从创建Coyote/Request开始,详细介绍了在Processor中的处理过程,包括RequestInfo的使用、解析HTTP头部信息、调用Adapter的service方法以及如何与Servlet交互。接着,文章解释了Connector/Request和Connector/Response的创建及执行过程,特别是RequestFacade在外观模式中的应用。最后,讨论了Request和Response的结束处理,强调它们在单个请求中的作用域。
摘要由CSDN通过智能技术生成

     Request在tomcat中是一个非常核心的的实例,下面以NIO为例来解读一下在各个时期下的状态(其实在Tomcat的几种模式中到了这里之后的处理都是差不多的)

1.1 创建coyote/Request

     这个request并不是我们最终在servlet中使用的Request,它是tomcat内部处理请求的一种有效方法,其创建过程是在接收到客户请求处理套接字构建Processor具体实现类的构造器中构建,以NIO模式为例则是在实例化请求处理类Http11NioProcessor时候构建,具体执行流程如下:
  (实例化Http11NioProcessor的栈过程)

Http11NioProcessor.java

public Http11NioProcessor(int maxHttpHeaderSize, NioEndpoint endpoint, int maxTrailerSize,
        Set<String> allowedTrailerHeaders, int maxExtensionSize, int maxSwallowSize) {

    super(endpoint);

    inputBuffer = new InternalNioInputBuffer(request, maxHttpHeaderSize);
    request.setInputBuffer(inputBuffer);

    outputBuffer = new InternalNioOutputBuffer(response, maxHttpHeaderSize);
    response.setOutputBuffer(outputBuffer);

    initializeFilters(maxTrailerSize, allowedTrailerHeaders, maxExtensionSize, maxSwallowSize);
}

AbstractHttp11Processor.java

public AbstractHttp11Processor(AbstractEndpoint<S> endpoint) {
    super(endpoint);
    userDataHelper = new UserDataHelper(getLog());
}

AbstractProcessor.java

public AbstractProcessor(AbstractEndpoint<S> endpoint) {
    this.endpoint = endpoint;
    asyncStateMachine = new AsyncStateMachine(this);
    request = new Request();
    response = new 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值