在Tomca中Endpoint主要用来接收网络请求,处理则由ConnectionHandler来执行.ConnectionHandler主要作用是调用对应协议的Processor来处理请求.而对应的processor经过简单的内容解析之后.则调用Adapter(连接适配器)的方法,将请求转发给容器.由Servlet容器来处理用户请求.由于Tomcat支持不同的协议,则需要不同的ConnectionHandler和Processor进行处理.AbstractConnectionHandler和AbstractProcessor为它们提供了基础的实现.
AbstractConnectionHandler及其子类都是AbstractProtocol及其子类的内部类.不同的Protocol实现了不同的ConnectionHandler.对请求的操作process方法是在AbstractConnectionHandler实现的,但是具体的processor的创建等是在子类中实现的.
public SocketState process(SocketWrapper<S> socket,SocketStatus status)
{
Processor<S> processor = connections.remove(socket.getSocket());
if (status == SocketStatus.DISCONNECT && processor == null) {
//nothing more to be done endpoint requested a close
//and there are no object associated with this connection
return SocketState.CLOSED;
}
socket.setAsync(false);
try
{
if (processor == null) {
processor = recycledProcessors.poll();
}
if (processor == null) {
processor = createProcessor();
}
initSsl(socket, processor);
SocketState state = SocketState.CLOSED;
do {
if (status == SocketStatus.DISCONNECT) {
//do nothing here, just wait for it to get recycled
} else if (processor.isAsync() || state == SocketState.ASYNC_END) {
state = processor.asyncDispatch(status);
}