zoukankan      html  css  js  c++  java
  • Tomcat启动过程(三):从SocketProcessor到Container

    1、Http11Protocol中的内部类Http11ConnectionHandler,执行其process方法

    if (processor == null) {
       processor = createProcessor();
      }
    SocketState state = processor.process(socket);//交给processor处理

    2、上面的processor为Http11NioProcessor类的实例,在其process方法中,会调用适配器adapter进行数据的处理

     adapter.service(request, response);

    这里的adapter实际为CoyoteAdapter类型的实例,该adapter的作用就是作为从connector到container的入口来使用的

    3、下面是adapter的处理过程,从该适配的connector中获取容器,进入容器的管道处理流程

    public void service(org.apache.coyote.Request req,org.apache.coyote.Response res)throws Exception {
      Request request = (Request) req.getNote(ADAPTER_NOTES);
      Response response = (Response) res.getNote(ADAPTER_NOTES);
      // Parse and set Catalina and configuration specific
      // request parameters
      req.getRequestProcessor().setWorkerThreadName(Thread.currentThread().getName());
      if (postParseRequest(req, request, res, response)) {//postParseRequest用来解析request请求
           connector.getContainer().getPipeline().getFirst().invoke(request, response);//这里开始进入容器的处理过程,返回结果为response
        }
      ……
    }

    4、进入容器container处理后,就要使用到容器的一个重要的结构:管道pipeline。每个容器类组件都有一个pipeline属性,这个属性控制请求的处理过程,在pipeline上可以添加Valve,进而可以控制请求的处理流程。可以将请求想象成水的流动,请求需要在各个组件之间流动,中间经过若干的水管和水阀,等所有的水阀走完,请求也就处理完了,而每个组件都会有一个默认的水阀(以Standard作为类的前缀)来进行请求的处理,如果业务需要的话,可以自定义Valve,将其安装到容器中。

    下面是对整个流程的一些图解,可以很形象地用来帮助理解:整个流程的最终目的就是走到Wrapper的地方,找到正确的Servlet,执行对应的过滤器和doService方法,返回response

  • 相关阅读:
    Java基础知识_毕向东_Java基础视频教程笔记(5-10 面向对象)
    Java 运算符-=,+=混合计算详解
    VS Code 基本介绍 和 快捷键
    Access-Control-Allow-Origin 跨域问题
    Linux常用命令收藏
    常用正则表达式
    IntelliJ IDEA 快捷键列表
    PAT A除以B
    PAT 部分A+B
    PAT 德才论
  • 原文地址:https://www.cnblogs.com/mingziday/p/5274343.html
Copyright © 2011-2022 走看看