根据之前的剖析,我们知道tomcat启动好之后,一直在等待这个请求,而这个等待请求的过程就是在HttpConnector的run方法里边,我们可以认为在tomcat启动好之后,就开启了线程在等待着前端发过来的请求:
while (!stopped){
// Accept the next incomingconnection from the server socket
Socket socket = null;
try {
// if (debug >= 3)
// log("run: Waiting onserverSocket.accept()");
socket = serverSocket.accept();
接收到请求之后呢?还是在HttpConnector的run方法里边:
HttpProcessorprocessor = createProcessor();
if (processor == null) {
try {
log(sm.getString("httpConnector.noProcessor"));
socket.close();
} catch (IOException e) {
;
}
continue;
}
// if (debug >= 3)
// log("run: Assigning socketto processor " + processor);
processor.assign(socket);
我们根据代码,进入到createProcessor方法里边查看下:
privateHttpProcessor createProcessor() {
synchronized (processors) {
if (processors.size() > 0) {
// if (debug >= 2)
// log("createProcessor:Reusing existing processor");
return ((HttpProcessor)processors.pop());
}
if ((maxProcessors > 0)&& (curProcessors < maxProcessors)) {
// if (debug >= 2)
// log("createProcessor:Creating new processor");
return (newProcessor());
} else {
if (maxProcessors < 0) {
// if (debug >= 2)
//log("createProcessor: Creating new processor");
return (newProcessor());
} else {
// if (debug >= 2)
//log("createProcessor: Cannot create new processor");
return (null);
}
}
}
}
这里首先对processors的stack栈队进行一个判断,如果存在元素有就弹出一个元素,并对栈队的最大数量进行一些判断,如果没有元素,那么就调用newProcessor创建一个HttpProcessor,我们进入newProcessor方法里边查看下:
privateHttpProcessor newProcessor() {
// if (debug >= 2)
// log("newProcessor: Creatingnew processor");
HttpProcessor processor = newHttpProcessor(this, curProcessors++);
if (processor instanceof Lifecycle) {
try {