Connector组件是Tomcat中的两个核心组件之一,他的主要任务是负责接收浏览器发过来的TCP连接请求,创建一个Request和Response对象分别用于和请求端交换数据。然后会产生一个线程来处理这个请求并把产生的Request和Response对象传给处理这个请求的线程,处理这个请求的线程就是Container组件要做的事了。
由于过程比较复杂,大体的流程可以用如下图所示的顺序图来解释。
在Tomcat 5 中默认的Connector是Coyote,这个Connector是可以选择替换的。Connector最重要的功能就是接收连接请求,然后分配线程让Container来处理这个请求,所以这必然是多线程的,多线程的处理是Connector设计的核心。Tomcat 5 将这个过程更加细化,他将Connector划分成Connector、Processor、Protocol,另外Coyote也定义自己的Request和Response对象。
当执行到threadStart()方法时,就会进入等待请求的状态,直到一个新的请求到来才会激活他继续执行,这个激活是在HttpProcessor的assign方法中的。
创建HttpProcess对象时会把available设为false,所以当请求到来时不会进入while循环,将请求的Socket赋给当前处理的Socket,并把available设为true,当available设置为true时,HttpProcessor的run方法将被激活,接下来将会处理这次请求。
解析Socket的过程在process方法中。
当Connector将Socket连接封装成Request和Response对象后,接下来的事情就交给Container来处理了。