Tomcat-Connector(连接器)
Connector组件是Tomcat两个核心组件之一(另一个是Container),主要任务是负责接收客户端发过来的TCP连接请求,创建一个Request和Response对象用于和请求端交换数据。
Connect类图关键属性和方法
ProtocalHandler是协议处理器接口,不同的协议各自实现,类图如下:
Connector 源码:
//1
public Connector(String protocol) {setProtocol(protocol);Class<?> clazz = Class.forName(protocolHandlerClassName);//2this.protocolHandler = (ProtocolHandler) clazz.newInstance();}//主要属性
protected ProtocolHandler protocolHandler = null;
protected Adapter adapter = null;
protected MapperListener mapperListener = new MapperListener(mapper, this);@Overrideprotected void initInternal() throws LifecycleException {super.initInternal();// Initialize adapteradapter = new CoyoteAdapter(this);//protocolHandler 设置适配器protocolHandler.setAdapter(adapter);protocolHandler.init();mapperListener.init();}@Overrideprotected void startInternal() throws LifecycleException {setState(LifecycleState.STARTING);protocolHandler.start();mapperListener.start();}
从源码中可以看到,初始化时调用方法 initInternal,创建Adapter(CoyoteAdapter)并将Adapter赋值给ProtocolHandler
ProtocolHandler初始化会调用对应Endpoint的初始化即bind,这样就可以开始在绑定指定地址和端口准备监听请求。
1处创建protocolHandler
ProtocolHandler负责根据具体的协议和I/O模型对请求数据进行接受,解析和处理,ProtocolHandler创建并委托Endpoint进行具体的处理。Endpoint经过一层处理后将请求传入Processor,最终由Processor将请求传入Adapter进而进入容器。
Connector初始化过程:
Coonector构造函数
涉及到相关源码如下:
// org.apache.coyote.AbstractProtocol#initendpoint.init();//org.apache.tomcat.util.net.AbstractEndpoint#initpublic final void init() throws Exception {if (bindOnInit) {bind();bindState = BindState.BOUND_ON_INIT;}}//org.apache.tomcat.util.net.NioEndpoint#bind
public void bind() throws Exception {serverSock = ServerSocketChannel.open();serverSock.socket().bind(addr,getBacklog());if (oomParachute>0) reclaimParachute(true);selectorPool.open();
}
Connector中几个重要对象:
CoyoteAdapter:
Tomcat使用Apache Coyote库来处理网络I/O的。
Adapter位于Coyote框架处理请求的末端,解析和得到的org.apache.coyote.Request和org.apache.coyote.Response将会传入Adapter,因此它作为Connector的适配器又可以访问到Tomcat组件包括容器,因此可以最终将请求传入Tomcat的核心容器中。
方法:org.apache.catalina.connector.CoyoteAdapter#service
// 创建request ,response
request = connector.createRequest();
request.setCoyoteRequest(req);
response = connector.createResponse();
response.setCoyoteResponse(res);// Link objects
request.setResponse(response);
response.setRequest(request);
// Calling the container, 讲请求消息传递给管道第一个阀门。
connector.getService().getContainer().getPipeline().getFirst().invoke(request, response);
注意:
connector包中的Request才是真正Servlet容器中的HttpServletRequest,它里面包含了完成请求需要的host,context和wrapper信息,在这里每一个wrapper其实都对应web.xml配置的一个Servlet。
Tomcat-Connector(连接器)相关推荐
- tomcat Connector 连接器
连接器的核心功能,本文去除非核心功能,留下整个程序的框架,便于理解. 1.接受连接请求 2.创建request,和response. 3.调用容器对应的Invoke方法, 首先看类的依赖结构. 1.C ...
- 《How Tomcat Works》读书笔记(三)--Connector(连接器)
<How Tomcat Works>读书笔记(三)--Connector(连接器) 这是<How Tomcat Works>第三四章的读书笔记.主要写了Tomcat4.0默认的 ...
- tomcat(3)连接器
[0]README 0.1)本文部分内容转自"深入剖析tomcat",旨在学习 tomcat(3)连接器 的基础知识: 0.2)Catalina 中有两个主要的模块:连接器(Ser ...
- 修改Tomcat Connector运行模式,优化Tomcat运行性能
这篇博客写得很好,记下来了:http://www.cnblogs.com/freeweb/p/6430053.html http://blog.csdn.net/xyang81/article/det ...
- 【Tomcat】Tomcat Connector的三种运行模式【bio、nio、apr】
Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O ...
- Tomcat Connector的三种运行模式【bio、nio、apr】
Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O ...
- 大厂面试真题解读:Tomcat的连接器是如何设计的?
导读 为什么要学习Tomcat的设计思路,对我们这些 crud 工程师有用吗?现代背景下,我们不仅可以学到Tomcat的架构,学会从宏观上怎么去设计一个复杂系统,怎么设计顶层模块,以及模块之间关系. ...
- 8080:The Tomcat connector configured to listen on port 8080 failed to start 的解决办法
问题再现: 控制台最后会显示Application启动失败,如下: ...*************************** APPLICATION FAILED TO START ******* ...
- Tomcat Connector
Tomcat是最常用的web容器之一,Tomcat Connector有bio.nio.apr三种运行模式: Tomcat运行模式: bio bio(blocking I/O),顾名思义,即阻塞式I/ ...
- httpd +jk_虚拟主机+ Apache httpd服务器+ Tomcat + mod_jk连接器
httpd +jk 在上一篇文章( Tomcat中的虚拟主机 )中,我们讨论了如何在Tomcat中设置虚拟主机. 它具有成本效益,因为仅一个公共IP即可托管多个域. 如果我们有大型组织,并且每个部门都 ...
最新文章
- oc45--多对象内存管理 优化
- 企业 SpringBoot 教程(六)springboot整合mybatis
- react部署之页面空白
- 远程扫描iPhone相册?苹果的好心网友不领情
- java常见面试题总结
- mysql 不停机_mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)
- Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例
- Unity根据电脑高中低配置加载不同模型
- day69-oracle 22-DBCA
- ife2015 深度克隆题目
- LINQ 学习笔记8
- Win Server 8中的利器:微软在线备份服务
- Postman 导出 curl命令 到命令行运行 Mac OS
- 服务器远程ghost,Ghost win7系统64位远程桌面连接教程
- 微信小程序——订阅号和服务号区别
- 相机等效焦距和视场角计算
- 程序化交易逆境中的奋斗史!
- 常见荧光染料修饰多种基团及其激发和 发射波长数据一览数据
- [论文阅读笔记12]An Effective Transition-based Model for Discontinuous NER
- wp文件转shp_完美实现从mapGIS文件转换成ArcGIS中shp格式文件