连接器与容器的桥梁——CoyoteAdapter

如果把整个tomcat内核最高抽象程度模块化,可以看成是由连接器Connector和容器Container组成,连接器负责HTTP请求接收及响应,生成请求对象及响应对象并交由容器处理,而容器则根据请求路径找到相应的servlet进行处理。请求响应对象从连接器传送到容器需要一个桥梁,这个桥梁正是此节讨论的主角——CoyoteAdapter。

这个组件的结构非常简单,仅仅包含两个工具类,URLEncoder负责对字符串URL编码,StringManager负责日志的国际化,这两个工具前面已详细介绍过。这个组件的作用很明显就是充当一个适配器,把连接器与容器连接起来,它的主要工作包括:①根据底层Request和Response生成Connector使用的Request和Response(使用门面模式实现数据隔离机制导致存在多种Request和Response,详情移步前面“讲究门面的Request”章节);②调用容器管道。它的功能简单到没必要更多去讨论,但对于为什么要引入这个适配器我们还是有必要深入研究。

首先得先了解适配器模式,简单说就是在两个对象之间添加一个对象使两个对象能正确连接起来。化简CoyoteAdapter并以此为例,

①   定义适配器接口

public interface Adapter {

public voidservice(Request req, Response res) throws Exception;

}

②   适配器类,负责调用容器

public class CoyoteAdapter implements Adapter {

public void service(Request req,Response res)throws Exception {

container.invoke();  //some operator about invoke container

}

}

③   连接器,初始化方法使用适配器,并将adapter作为参数传入protocolHandler,protocolHandler看成一个对象即可,必须保证以Adapter作为参数传入。

public class Connector{

protected void initInternal(){

Adapter adapter = new CoyoteAdapter();

   protocolHandler.setAdapter(adapter);

}

}

④   新的适配器类,假如有一个新的容器newContainer调用方法定义为newInvoke,这时只要重新定义一个新的适配器并实例化一个NewAdapter对象传入protocolHandler即可,保证了以Adapter作为参数传入,不必做其他大量的更改动作。

public class NewAdapter implements Adapter {

public void service(Request req,Response res)throws Exception {

newContainer.newInvoke();

}

}

容器的调用本来可以直接在连接器中进行,但为了后期扩展及适配其他容器,于是添加了一个适配器CoyoteAdapter,引入适配器增加了代码的复杂性,但对于它带来的好处是完全值得的。

时间: 2024-12-22 03:31:46

连接器与容器的桥梁——CoyoteAdapter的相关文章

75篇关于Tomcat源码和机制的文章

75篇关于Tomcat源码和机制的文章 标签: tomcat源码机制 2016-12-30 16:00 10083人阅读 评论(1) 收藏 举报  分类: tomcat内核(82)  版权声明:本文为博主原创文章,未经博主允许不得转载. 整理下前面写过的75篇关于Tomcat源码和机制的文章 文章列表 如何设计一个Web容器 Web安全认证机制知多少 Tomcat集群实现源码级别剖析 Tomcat集群如何同步会话 从单机到集群会话的管理之集群模式一 从单机到集群会话的管理之集群模式二(更大的集群

Tomcat剖析(五):Tomcat 容器

Tomcat剖析(五):Tomcat 容器 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三):连接器(1) 4. Tomcat剖析(三):连接器(2) 5. Tomcat剖析(四):Tomcat默认连接器(1) 6. Tomcat剖析(四):Tomcat默认连接器(2) 7. Tomcat剖析(五):容器 第一部分:概述 这一节基于<深度剖析Tomcat>第五章:容器 总结而成 一定要先到我的git

攻城狮在路上(伍)How tomcat works(三)Tomcat的默认连接器

在第4章中将通过剖析Tomcat4的默认连接器的代码,讨论需要什么来创建一个真实的Tomcat连接器. 注意:本章中提及的“默认连接器”是指Tomcat4的默认连接器.即使默认的连机器已经被弃用,被更快的,代号为Coyote的连接器所代替,它仍然是一个很好的学习工具. Tomcat连接器是一个可以插入servlet容器的独立模块,已经存在相当多的连接器了,包括Coyote, mod_jk, mod_jk2和mod_webapp.一个Tomcat连接器必须符合以下条件: 1. 必须实现接口org.

攻城狮在路上(肆)How tomcat works(三) 连接器:Connector

在介绍中提到,Catalina中有两个主要的模块:连接器和容器.本章中你将会写一个可以创建更好的请求和响应对象的连接器,用来改进第2章中的程序.一个符合Servlet 2.3和2.4规范的连接器必须创建javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse,并传递给被调用的servlet的service方法. 在本章的应用程序中,连接器解析HTTP请求头部并让servlet可以获得头部, cooki

C++笔记(6):标准模板库STL:容器、迭代器和算法

STL(Standard Template Library)是C++标准库的一部分.STL的代码从广义上讲分为三类:容器.迭代器和算法. 1.容器 2.迭代器 3.算法  -------------------------------------------------------------------------------------------------------------------------- 1.容器 顺序容器容器是特定类型对象的集合.顺序容器为程序员提供控制元素存储和访问

Tomcat剖析(三):连接器

Tomcat剖析(三) 目录: Tomcat剖析(一):一个简单的Web服务器 Tomcat剖析(二):一个简单的Servlet服务器 Tomcat剖析(三):连接器 大家都知道Catalina 中有两个主要的模块:连接器和容器.本节将HttpServer2完善为HttpConnect,创建一个更好的请求和响应对象的连接器,不仅仅是简简单单的调用自己的await方法,而是用线程启动. 上一节是使用Reques对象,因为我们不知道请求的类型,而这一节中,如果是HTTP请求,那么Request对象中

第三篇:Docker容器架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. Docker Daemon是docker最核心的守护进程,也就是Server端,Server端可以部署在远程,也可以部署在本地,因为Server端与客户端(Docker Client)是通过Rest API进行通信. docker CLI 实现容器和镜像的管理,为用户提供统一的操作界面,这个 客户端提供一个只读的镜像,然后通过镜像可以创建一个或

Portworx: 多云成为使用容器技术的主要驱动力

在多个云平台上运行应用程序已经成为了容器技术使用的主要驱动力,带来了远超以往的益处,如开发者效率的提升以及支持微服务等. 在2018年版本的<年度容器技术采用情况调查>中,Portworx访谈的用户数量从2017年的250位增加到了2018年的424位.从更加成熟的容器用户角度来看:安全.数据管理和多云是目前面临的最大挑战,同时永久性存储已经不再最大的问题. 在过去几年中我们看到,人们常说锁定某个单一云供应商是不利的,但实际上并不会同时使用多个云服务提供商.调查显示,在那些声称因为多云才使用容

Tomcat Connector

转自: http://blog.csdn.net/aesop_wubo/article/details/7617416 如下图所示,Tomcat服务器主要有两大核心模块组成:连接器和容器,本节只分析连接器的实现. 连接器主要是接收用户的请求,然后封装请求传递给容器处理,tomcat中默认的连接器是Coyote.首先来看连接器的类图: protocol 我们发现这个类里面有很多与protocol有关的属性和方法,tomcat中支持两种协议的连接器:HTTP/1.1与AJP/1.3,查看tomcat