Connector是Tomcat中非常重要的一个组成部分,说白了,就是如何从客户端获取到相应的请求信息.这部分主要包括的难点有这样几个部分: 1.客户端与服务端的协议 客户端与服务端的协议是多种多样的,Tomcat肯定不能仅仅支持HTTP协议 2.数据I/O方式 I/O通常有NIO.BIO等多种方式,如何提高数据传输的效率? 一.Coyote   1.Coyote简介 Tomcat中的Connector就是Coyote,功能主要是封装了底层的网络通信.为Catalina容器提供了统一的接口,使容…
Tomcat是非常常用的应用服务器,了解Tomcat的总体架构以及实现细节,对于理解整个java web也是有非常大的帮助. 一.Server   1.最简单的服务器结构 最简单的服务器结构如图所示: Server向客户端提供服务,并且服务器可以start或stop. 缺点:如果需要该服务器支持多种网络协议,就很难扩展,因此改进如下: 2.Connector和Container 将容器拆分成Connector以及Container,Connector用于和客户端连接,可以扩展支持多种协议,建立连…
8标准覆盖机制J2SE 1.4 and 1.5 都包含了一个XML处理解析器的Java API .Bootstrap 类加载器加载这个解析器的类文件,所以这个解析器会优先于任何一个安装在CLASSPATH里的解析器 被加载,即使您已经安装了新版本的解析器.标准覆盖机制允许您重写JAVA_HOME/lib/endorsed文件夹里某些特定的类(例如CORBA 和 JAXP 类).Bootstrap 类加载器将会优先加载这些类.想详细了解此机制,请访问http://java.sun.com/j2se…
Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计   Connector要实现的主要功能如下: 设计图如下: 1.ProtocolHandler Connector中的ProtocolHandler用于处理不同的通信协议,Tomcat主要支持HTTP.AJP协议,并且支持BIO.NIO.APR等I/O方式.ProtocolHandler中使用AbstractEndpoint启动…
上一篇博文介绍了Server的创建,在Server创建完之后,就进入到Engine的创建过程,如下: 一.Engine的创建   1.创建Engine实例 当前次栈顶元素为Service对象,通过Service对象的setContainer()方法,将Engine对象添加到Service中. 2.为Engine添加集群配置 3.为Engine添加生命周期监听器 4.为Engine添加安全配置 二.Host的创建   1.创建Host的实例 addCallMethod(String rule,St…
类加载器就是根据类的全限定名(例如com.ty.xxx.xxx)来获取此类的二进制字节流的代码模块,从而程序可以自己去获取到相关的类. 一.java中的类加载器   1.类加载器类别 java中的类加载器主要分为三类: Bootstrap ClassLoader:启动类加载器,负责加载<JAVA_HOME>\lib目录中的class文件: Extension ClassLoader:扩展类加载器,负责加载<JAVA_HOME>\lib\ext路径下的class文件: Applica…
对于应用服务器来说,性能是非常重要的,基本可以说决定着这款应用服务器的未来.通常从软件角度来说,应用服务器性能包括如下几个方面: 1.请求处理的并发程度,当前主流服务器均采用异步的方式处理客户端的请求: 2.减少网络传输的数据量,提高网络利用率: 3.降低新建网络链接的开销,以实现链接在多个请求之间的复用: 4.选择合适的I/O方式,例如NIO等. 一.阻塞与非阻塞.同步与异步 ------同步:发出一个调用时,没有得到结果之前,该调用不返回,由调用者主动等待调用结果. | 关注的是消息通信机制…
学web也有一段时间了.为了从底层了解web应用在Tomcat中的执行,决定看一下Tomcat的源代码參见<How Tomcat works>    和大牛博客.对大体架构有了一定的了解,可是详细细节还是不大清楚,以后随着对这方面的深入再详细看吧. 以下是解析的Tomcat系列: Tomcat源代码解析(一)下载源代码与导入eclipse Tomcat整体架构(Tomcat源代码解析系列二) tomcat的启动过程(Tomcat源代码解析(三)) Tomcat关闭过程(Tomcat源代码解析四…
Tomcat 发展这么多年,已经比较成熟稳定.在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌生人』,难道说如今就没有必要深入学习它了么?学习它我们又有什么收获呢? 静下心来,细细品味经典的开源作品 .提升我们的「内功」,具体来说就是学习大牛们如何设计.架构一个中间件系统,并且让这些经验为我所用. 美好的事物往往是整洁而优雅的.但这并不等于简单,而是要将复杂的系统分解成一个个小模块,并且各个模块的职责划分也要清晰合理. 与此相反的是凌乱无序,比如…
很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动.这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能.本文首先从应用层次分析了tomcat所有的connector种类及用法,接着从架构上分析了connector模块在整个tomcat中所处的位置,最后对connector做了详细的源代码分析.并且我们以Http11NioProtocol为例详细说明了to…