连接器与容器的桥梁——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,引入适配器增加了代码的复杂性,但对于它带来的好处是完全值得的。

点击订购作者《Tomcat内核设计剖析》

时间: 2025-01-26 05:03:33

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

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

整理下前面写过的75篇关于Tomcat源码和机制的文章 文章列表 如何设计一个Web容器 Web安全认证机制知多少 Tomcat集群实现源码级别剖析 Tomcat集群如何同步会话 从单机到集群会话的管理之集群模式一 从单机到集群会话的管理之集群模式二(更大的集群) Tomcat集群的failover机制 Tomcat集群应用部署的实现机制 Tomcat集群机制剖析及其生产部署选型 Tomcat如何实现WebSocket Tomcat如何实现Comet Tomcat怎么实现异步Servlet To

tomcat连接器-coyote框架

不论Tomcat的容器设计得如何精妙,本质上Tomcat就是个http服务器,需要从socket中获得HTTP数据流:另一方面,容器只能处理封装好的org.apache.coyote.Request (这个类的具体用途下面会讲到),从socket到Request之间需要有个转换过程.因此,连接socket和容器之间的重任就交给了CoyoteCoyote简介coyote(北美的一种狼.山狗)coyote是tomcat的Connector框架的名字,简单说就是coyote来处理底层的socket,并

PHP5中使用Web服务访问J2EE应用程序(1)

j2ee|php5|web|web服务|程序|访问 很多 Web 开发人员喜欢 PHP 的丰富功能和简单易用,但有时候他们需要访问 J2EE 应用程序服务器中已有的业务逻辑.本文将通过一些例子说明如何通过 PHP 5 中新的 SOAP 扩展使用 Web 服务来访问 J2EE 应用程序,而不必脱离 PHP 环境,也不用学习新的编程模型. PHP.Web 服务和 SOAP 简介 本文将介绍如何从 PHP 脚本中访问企业应用程序.您可能是一位 PHP 程序员,需要为部门 Web 应用程序编写代码,以便

PHP5中使用Web服务访问J2EE应用程序

j2ee|php5|web|web服务|程序|访问 很多 Web 开发人员喜欢 PHP 的丰富功能和简单易用,但有时候他们需要访问 J2EE 应用程序服务器中已有的业务逻辑.本文将通过一些例子说明如何通过 PHP 5 中新的 SOAP 扩展使用 Web 服务来访问 J2EE 应用程序,而不必脱离 PHP 环境,也不用学习新的编程模型. PHP.Web 服务和 SOAP 简介 本文将介绍如何从 PHP 脚本中访问企业应用程序.您可能是一位 PHP 程序员,需要为部门 Web 应用程序编写代码,以便

《深入剖析Tomcat》一第 3 章 连 接 器

第 3 章 连 接 器 正如前言所述,Catalina中有两个主要的模块,连接器(connector)和容器(container).在本章中,将会建立一个连接器来增强第2章中的应用程序的功能,用一种更好的方法来创建request对和response对象.兼容Servlet 2.3和2.4规范的连接器必须要负责创建javax.servlet.http.HttpServletRequest对象和javax.servlet.http.HttpServletResponse的实例,并将它们作为servl

Composite Application Guidance for WPF(5)——依赖注入容器

依赖注入容器和Prism的基础服务已经在本系列随笔中提到过很多次,今天将其分离出来专门说一说 1, 为什么要使用依赖注入容器 我们知道, 在Composite Application中各个模块之间是松耦合的关系, 也就是在设计的时候尽可能地减少模块间的依赖, 但无论如何从业务角度讲, 他们之间总还是要相互通信与合作的. 所以依赖注入容器在这其中扮演了一个桥梁般的角色. 比如当创建某一个组件实例的时候, 其依赖于另外的一个组件或服务, 此时依赖注入容器会将其需要的信息"注入(Injection)&

DockOne微信分享(一四二):容器云在万达的落地经验

本文讲的是DockOne微信分享(一四二):容器云在万达的落地经验[编者的话]容器生态是现在非常火热的技术生态之一,个人认为它主要囊括着四个方面的技术栈:一是容器核心技术栈(包括 Docker.rkt 及第三方公司自主研发的容器 Engine 等):二是容器基础技术栈(包括容器网络.存储.安全及服务发现等):三是容器编排技术栈(包括 Mesos/Marathon.Swarm.Kubernetes 及 OpenShift 等):四是容器应用技术栈(主要包括 CI/CD.监控.日志及微服务框架等).

轻松玩转应用容器化(一)- 初识容器迁移工具Derrick

前言 2017年是容器领域交战非常激烈的一年,容器编排领域逐渐形成一超多强的局面,各种容器解决方案变得越来越成熟,传统的中间件(监控.日志.报警)对容器化场景支持逐渐完善.到了今年,如果一家公司还没有开始对Docker进行关注,真的不好意思说是在互联网的圈子里了. 越来越多的企业开始在生产环境中使用容器技术进行架构,在各种互联网大会上,也有越来越多的嘉宾开始分享他们在使用容器上的心得.但是选择容器技术进行整体的技术架构转型实际上需要极大勇气的,在几年前,容器的解决方案还不完善,第一批吃螃蟹的企业

开源容器集群管理系统Kubernetes架构及组件介绍

Together we will ensure that Kubernetes is a strong and open container management framework for any application and in any environment, whether in a private, public or hybrid cloud. --Urs Hölzle, Google Kubernetes 作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的