Tomcat 架构 (一)】的更多相关文章

Session管理是JavaEE容器比较重要的一部分,在app中也经常会用到.在开发app时,我们只是获取一个session,然后向session中存取数据,然后再销毁session.那么如何产生session,以及session池如何维护及管理,这些并没有在app涉及到.这些工作都是由容器来完成的. Tomcat中主要由每个context容器内的一个Manager对象来管理session.对于这个manager对象的实现,可以根据tomcat提供的接口或基类来自己定制,同时,tomcat也提供…
很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动.这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能.本文首先从应用层次分析了tomcat所有的connector种类及用法,接着从架构上分析了connector模块在整个tomcat中所处的位置,最后对connector做了详细的源代码分析.并且我们以Http11NioProtocol为例详细说明了to…
8标准覆盖机制J2SE 1.4 and 1.5 都包含了一个XML处理解析器的Java API .Bootstrap 类加载器加载这个解析器的类文件,所以这个解析器会优先于任何一个安装在CLASSPATH里的解析器 被加载,即使您已经安装了新版本的解析器.标准覆盖机制允许您重写JAVA_HOME/lib/endorsed文件夹里某些特定的类(例如CORBA 和 JAXP 类).Bootstrap 类加载器将会优先加载这些类.想详细了解此机制,请访问http://java.sun.com/j2se…
在实践过程中,从WebSphere中实现一个EJB的容器以及从WebLogic中实现一个JMS几乎都是不可能的,然而来自Apache基金会的servlet容器Tomcat至少在理论上是可能做到的. 请注意,这里所说的“接口”也包含抽象类.规范的API可能会提供一个实现的模板,其中包括定义了一些抽象的基本类型的操作来供服务提供者去实现. 而服务提供者应提供这些接口和抽象类的具体实现.例如,在Tomcat中HttpSession接口被以org.apache.catalina.session.Stan…
出处:http://gearever.iteye.com tomcat架构分析 (概览) tomcat架构分析 (容器类) tomcat架构分析 (valve机制) tomcat架构分析 (valve源码导读) tomcat架构分析 (Session管理) tomcat架构分析 (JNDI配置) tomcat架构分析 (JNDI体系绑定) tomcat架构分析 (connector BIO 实现) tomcat架构分析 (connector NIO 实现)…
Tomcat架构图 当用户在地址栏输入访问地址后,首先识别访问协议(假设为http),那么通过针对于http协议传输的Connector连接器,连接到tomcat的服务中,连接后开始检测Engine下的host主机名中有无匹配项,如果有,通过appBase找到目标文件夹,然后开始访问相应的html文件等:如果没匹配到,执行<Engine name="Catalina" defaultHost="localhost">这一默认匹配项进行默认匹配. 理解se…
(二期)16.tomcat的整体架构与session共享方案 [课程16]tomcat...共享.xmind47.6KB [课程16]tomcat...流程.xmind0.6MB [课程16]tomcat...组件.xmind0.6MB [课程16]tomcat...架构.xmind0.9MB [课程16]手写一...mcat.xmind0.1MB [课程16预习]tom...架构.xmind0.6MB 课程目标: 理解tomcat的基本组成与工作流程 学会手动写一个迷你tomcat 讲课顺序…
Tomcat是非常常用的应用服务器,了解Tomcat的总体架构以及实现细节,对于理解整个java web也是有非常大的帮助. 一.Server   1.最简单的服务器结构 最简单的服务器结构如图所示: Server向客户端提供服务,并且服务器可以start或stop. 缺点:如果需要该服务器支持多种网络协议,就很难扩展,因此改进如下: 2.Connector和Container 将容器拆分成Connector以及Container,Connector用于和客户端连接,可以扩展支持多种协议,建立连…
出处:http://gearever.iteye.com Tomcat是目前应用比较多的servlet容器.关于tomcat本身的特点及介绍,网上已经有很多描述了,这里不再赘述.Tomcat除了能够支撑通常的web app外,其本身高度模块化的架构体系,也能带来最大限度的可扩展性.目前tomcat版本已经衍生到tomcat7,但是主流的版本还是tomcat6.此系列架构体系介绍还是以tomcat6为蓝本. Tomcat是有一系列逻辑模块组织而成,这些模块主要包括: 核心架构模块,例如Server…
出处:http://gearever.iteye.com 在tomcat架构分析(概览)中已经介绍过,connector组件是service容器中的一部分.它主要是接收,解析http请求,然后调用本service下的相关servlet.由于tomcat从架构上采用的是一个分层结构,因此根据解析过的http请求,定位到相应的servlet也是一个相对比较复杂的过程.  整个connector实现了从接收socket到调用servlet的全部过程.先来看一下connector的功能逻辑: 接收soc…
出处:http://gearever.iteye.com 上一篇简单记录了缺省配置的connector的内部构造及消息流,同时此connector也是基于BIO的实现.除了BIO外,也可以通过配置快速部署NIO的connector.在server.xml中如下配置: 整个tomcat是一个比较完善的框架体系,各个组件之间都是基于接口的实现,所以比较方便扩展和替换.像这里的“org.apache.coyote.http11.Http11NioProtocol”和BIO的“org.apache.co…
出处:http://gearever.iteye.com 源码面前,了无秘密                              ----侯捷 在tomcat架构分析(valve机制)(http://gearever.iteye.com/blog/1536022)里已经对valve的机制做了分析.现在通过源码来加深下理解.侯捷说过,源码面前,了无秘密.通过这些代码,可以看到在tomcat中我们经常碰到的一些现象或配置是怎么实现的. StandardEngineValve看一下Standar…
PS:but, it's bullshit ! 备注:实话说,从文档上扒拉的,文档地址:在每一个Tomcat安装目录下,会有一个webapps文件夹,里面有一个docs文件夹,点击index.html  或者直接上官网看文档也一样:http://tomcat.apache.org/tomcat-8.0-doc/ 一.Tomcat目录结构说明 说明:这个是Tomcat 8 版本! 整体的目录结构如下,对于每个文件夹都是干嘛的,文件夹内部的文件又是用来干嘛的,那就点开RUNNING.txt文件看吧,…
经历了之前的两篇,我们已经大体上了解了docker部署容器的过程. 使用docker部署nginx+tomcat架构 使用docker部署nginx+tomcat架构():访问mysql数据库 不过,整个部署过程中需要手动输入很多的docker命令,稍显繁琐并且容易出错.那么有没有一种相对简洁优雅的方式来完成这些部署工作呢?答案是有的,docker-compose(一下简称“compose”)正是为此而生. 关于docker-compose(了解更多:https://docs.docker.co…
Tomcat架构与原理 架构图 原理 ①.用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得. ②.Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应. ③.Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host. ④.Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engi…
java中,常用的web服务器一般由tomcat,weblogic,jetty,undertwo等,但从用户使用广泛度来说,tomcat用户量相对比较大一些,当然这也基于它开源和免费的特点. 从软件架构的发展角度来看,软件架构大致经历了如下几个阶段(当然,我们这篇文章不是主讲架构的,因此只是简单提一下架构发展,至于具体的架构,会在后面的文章中陆续与大家分享架构系列): ​ 那么从java web角度来说,架构大致经历了: Sevlet架构=>SSH架构=>SSM架构=>分布式垂直架构=&…
Tomcat 发展这么多年,已经比较成熟稳定.在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌生人』,难道说如今就没有必要深入学习它了么?学习它我们又有什么收获呢? 静下心来,细细品味经典的开源作品 .提升我们的「内功」,具体来说就是学习大牛们如何设计.架构一个中间件系统,并且让这些经验为我所用. 美好的事物往往是整洁而优雅的.但这并不等于简单,而是要将复杂的系统分解成一个个小模块,并且各个模块的职责划分也要清晰合理. 与此相反的是凌乱无序,比如…
Tomcat - 理解Tomcat架构设计 前文我们已经介绍了一个简单的Servlet容器是如何设计出来,我们就可以开始正式学习Tomcat了,在学习开始,我们有必要站在高点去看看Tomcat的架构设计.@pdai 准备知识 一些准备知识点. Tomcat和Catalina是什么关系? Tomcat的前身为Catalina,Catalina又是一个轻量级的Servlet容器 Tomcat的前身为Catalina,Catalina又是一个轻量级的Servlet容器.在美国,catalina是一个很…
一图甚千言,这张图真的是耽搁我太多时间了: 下面的tomcat架构设计代码分析,和这张图息息相关. 使用maven搭建本次的环境,贴出pom.xml完整内容: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche…
浅读tomcat架构设计和tomcat启动过程(1) https://www.cnblogs.com/piaomiaohongchen/p/14977272.html tomcat通过org.apache.catalina.Lifecycle接口统一管理生命周期,所有有生命周期的组建都要实现Lifecycle接口. 通过反射加载查看代码: Lifecycle的接口方法有很多,简单解读下: (1)定义13个String类型的常量,不同的常量,代表不同的状态信息 (2)定义了3个管理监听器的方法:…
浅读tomcat架构设计和tomcat启动过程(1) https://www.cnblogs.com/piaomiaohongchen/p/14977272.html 浅读tomcat架构设计之tomcat生命周期(2) https://www.cnblogs.com/piaomiaohongchen/p/14982770.html Container是tomcat容器的接口,接口位置org.apache.catalina.Container Container一共有4个子接口,分别是:Engi…
p { margin-bottom: 0.25cm; line-height: 120% }…
最近在看<深入分析java web技术内幕>,书中讲解了一部分tomcat的相关知识,我也去查看了一些源码,看了大神们写的代码,我才知道自己就像在做加减乘除一样,这是不行的.还有好多包和类要属性.就像要盖高楼大厦一样,对其不熟悉怎么行呢?只有对底层架构了如指掌,才能流畅的写业务,同时也是一个学习的过程. private Context createContext(Host host, String url) { String contextClass = StandardContext.cla…
Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计   Connector要实现的主要功能如下: 设计图如下: 1.ProtocolHandler Connector中的ProtocolHandler用于处理不同的通信协议,Tomcat主要支持HTTP.AJP协议,并且支持BIO.NIO.APR等I/O方式.ProtocolHandler中使用AbstractEndpoint启动…
前面的http及socket两部分内容,主要是为了后面看Tomcat源代码而学习的一些网络基础.从这章開始.就開始实际深入到Tomcat的'内在'去看一看. 在分析Tomcat的源代码之前,准备先看一下Tomcat的架构与一些核心类的简单分析,并简介一下Tomcat是怎样处理一次Http请求的. 这部分内容有相当一部分来源于网络.在此,感谢原作者的贡献. Tomcat的整体架构 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpemlhaXNodW…
架构说明: 使用nginx+tomcat实现动态/静态(资源请求)分离和负载均衡. 参考文档: https://www.runoob.com/docker/docker-tutorial.html 配置docker镜像仓库:/etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com", "http://hub-mirror.c.163.com", &…
浏览器访问服务器的流程 请求发起的过程: 注意:浏览器访问服务器使用的是http协议,http是应用层协议,而具体传输还是使用的TCP/IP协议 Tomcat系统总架构 2.1 Tomcat请求处理过程 一个http请求过来,Tomcat会接收,然后根据配置调用不同的servlet来进行处理. 为了解耦,设计了一个Tomcat容器: 因此,Tomcat不仅是一个http服务器,还是一个servlet容器.这也就是它的两个重要的功能: 和客户端浏览器交互,进行socket通信,将字节流和Reque…
一直都没有搞明白tomcat中server.service.Engine.Host.Context概念的意义,最近认真看了<Tomcat 6 Developer Guide>,有了进一步的了解.…
嵌套组件 这些组件是针对Tocmat做的特定实现,他们的主要目的是使各种Tomcat容器可以完成各自的工作. 1.阀(Valve) valve是处理元素,它可以被包含在每个Tomcat容器的处理路径中--如engine.host.context以及servelt包装器.若要增加Valve到Tomcat容器则需要在server.xml中使用<Valve>标签.在server.xml中这些标签的执行顺序与其物理顺序相同. 而在Tomcat中也分布这大量预先编译好的valve.包括: • 在请求日志…
5.容器组件 这一小节中我们将讨论请求处理组件:引擎(engine).虚拟主机.上下文(context)组件. 5.1.引擎(engine) 引擎表示可运行的Catalina的servlet引擎实例并且包含了servlet容器的核心功能.在一个服务中只能有一个引擎.同时,作为一个真正的容器,Engine元素之下可以包含一个或多个虚拟主机. 作为请求处理的主要组件,它接收代表传入请求的对象以及输出相应结果.它主要功能是将传入请求委托给适当的虚拟主机处理.如果根据名称没有找到可处理的虚拟主机,那么将…