Tomcat的Connector组件
来源:互联网 发布:sql server 2005 编辑:程序博客网 时间:2024/05/16 19:29
上一次画了一个Tomcat的启动序列图,了解了tomcat的主要组件和启动顺序,今天着重了解一下Connector组件。
Tomcat各个组件的实例化都是在Catalina类的初始化过程中完成的,然后启动各个组件。这里从Connector的start()方法开始。
connector.start()方法里面创建了一个CoyoteAdapter对象,这个对象负责处理请求;然后把CoyoteAdapter对象关联到ProtocolHandler,
adapter = new CoyoteAdapter(this);
protocolHandler.setAdapter(adapter);
其中,protocolHandler对象是在Connector对象创建的时候创建的,初始化代码在Connector的构造函数,相关代码如下
protected String protocolHandlerClassName = "org.apache.coyote.http11.Http11Protocol";
Class clazz = Class.forName(protocolHandlerClassName);
this.protocolHandler = (ProtocolHandler) clazz.newInstance();
接着调用了protocolHandler 的init()方法和start()方法,到此Connector启动完成。下面具体看protocolHandler 对象如何初始化和启动。
Http11Protocol里面有一个对象是JIoEndpoint endpoint = new JIoEndpoint(),负责处理TCP连接。
Http11Protocol包含一个内部类:Http11ConnectionHandler,这个内部类使用Http11Processor处理Socket连接。
在Http11Protocol的init()方法里面,给endpoint 设置处理器Http11ConnectionHandler和一个socket工厂类,然后执行endpoint对象的init()方法,该方法主要是从socket工厂类获取一个ServerSocket对象,既 serverSocket = serverSocketFactory.createSocket(port, backlog);
在Http11Protocol的start()方法里面,主要是调用endpoint对象的start()方法来启动线程接收Socket连接。当接收到一个socket连接后,就创建一个Worker线程来处理这个socket,这个Worker线程的run()方法里面调用Http11ConnectionHandler的process()方法创建了Http11Processor对象来处理这个socket请求,具体的处理过程就在Http11Processor的process()方法,在这个方法里面,创建了Request对象,代表请求消息,Response对象表示响应;从socket输入流里面读取HTTP请求,然后解析请求行,请求头;然后通过一些过滤器处理请求头;接着执行adapter.service(request, response);处理请求;
这一步,具体里面实现,下次再看,代码确实很多。
- Tomcat的Connector组件
- Connector是Tomcat最核心的组件
- Tomcat Connector组件
- Tomcat Connector组件
- Tomcat Connector组件
- Tomcat 核心组件Connector剖析
- Tomcat-connector的微调
- 强撸Tomcat核心组件:NIO Connector
- Tomcat 8的Connector部分
- tomcat connector
- tomcat connector
- Tomcat Connector
- 给Tomcat的Connector设置URIEncoding
- tomcat-connector-address遇到的问题
- Tomcat-connector的微调(2): maxConnections, maxThreads
- Tomcat-connector的微调(1): acceptCount参数
- Tomcat Connector的三种运行模式
- Apache Tomcat Connector安装
- js date
- FILE I/O
- ExpandableListView上下文菜单的实现
- IOS学习之UINavigationController详解与使用:添加UIBarButtonItem
- 时空转换思想
- Tomcat的Connector组件
- 完成端口写的一个服务器
- ibatis缓存浅析
- 深入分析Android触摸事件
- FF浏览器嵌套div中margin-top转移问题的解决办法
- 机器学习十大经典算法
- ubuntu安装utorrent,下载六维资源
- Java专业英语词汇之一
- linux下IPTABLES配置详解