一. 预备 如果你是Windows用户,使用Eclipse,并且想自行导入源码进行分析,你可能需要:Eclipse 导入 Tomcat 源码 如果你已遗忘 观察者模式,那么你可以通过该文章回顾:设计模式(五)观察者模式 如果你已遗忘 UML类图相关知识,那么你可以通过文章 (五分钟读懂UML类图 )快速回顾 二. 启程 1. Tomcat组件生命周期 Tomcat中包含多种组件,每个组件有各自的生命周期,而每个生命周期中又包含多种状态,这些状态会根据程序的运行而相互转换,在这个过程中,某些组件会…
一 序言 随着软件项目开发需求的增多,拥有一款优秀的.顺手的IDE(Integrated Development Environment)对程序员来说显得格外重要.本文就Java程序开发,选择了3款IDE来做调研分析,其中两款比较有代表性的是:Eclipse.IntelliJ IDEA,另外一款是我个人比较喜欢的轻量级编辑器:Sublime Text  3.下面是这些工具的下载地址: Eclipse:https://www.eclipse.org/downloads/ Sublime Text:…
原型化系统:DevTools       密码:lcx 1. 这是一个什么样的平台? DevTools,可译为:开发者工具库.初衷是聚集各类开发工具,方便开发者获取:此外,大家可以分享自己的工具库与工具配置信息等. 2. 为什么会想到做这样的平台? 开发工具越来越多,如果都到官网去一个个下载,会有点浪费时间.并且有些可能因为被墙而无法访问,或者服务器在境外导致访问缓慢.所以我就想,能不能有这样一个平台,把开发工具都聚集在一起,提供这些工具的下载镜像,来方便开发者们获取工具.(关于这点,其实有位老…
tomcat原理解析(一):一个简单的实现 https://blog.csdn.net/qiangcai/article/details/60583330 2017年03月07日 09:54:27 逆水行舟不进则退 阅读数:19328 标签: tomcat 更多 个人分类: tomcat实现   一 概述 前段时间去面试,被人问到了tomcat实现原理.由于平时没怎么关注容器的实现细节,这个问题基本没回答上来.所以最近花了很多时间一直在网上找资料和看tomcat的源码来研究里面处理一个HTTP请…
学web也有一段时间了.为了从底层了解web应用在Tomcat中的执行,决定看一下Tomcat的源代码參见<How Tomcat works>    和大牛博客.对大体架构有了一定的了解,可是详细细节还是不大清楚,以后随着对这方面的深入再详细看吧. 以下是解析的Tomcat系列: Tomcat源代码解析(一)下载源代码与导入eclipse Tomcat整体架构(Tomcat源代码解析系列二) tomcat的启动过程(Tomcat源代码解析(三)) Tomcat关闭过程(Tomcat源代码解析四…
(2)服务器收到http请求报文,返回http响应报文 Tomcat服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1” Tomcat服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1” Tomcat服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1” 服务器接收到浏览器传输的数据后,开始解析接收到的数据,解析"GET /JavaWebDemo1/1.jsp HTTP/1.1"里面的内容,知道客户端浏览器要访…
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""> 前面已经分析完了Tomcat的启动和关闭过程.本篇就来接着分析一下Tomcat中请求的处理过程. 在開始本文之前,咋们首先来看看一个Http请求处理的过程.普通情况下是浏览器发送http请求->建立Socket连接…
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…
Tomcat是非常常用的应用服务器,了解Tomcat的总体架构以及实现细节,对于理解整个java web也是有非常大的帮助. 一.Server   1.最简单的服务器结构 最简单的服务器结构如图所示: Server向客户端提供服务,并且服务器可以start或stop. 缺点:如果需要该服务器支持多种网络协议,就很难扩展,因此改进如下: 2.Connector和Container 将容器拆分成Connector以及Container,Connector用于和客户端连接,可以扩展支持多种协议,建立连…
一  Kafka HA设计解析 1.1 为何需要Replication 在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Broker宕机,则其上所有的Partition数据都不可被消费,这与Kafka数据持久性及Delivery Guarantee的设计目标相悖.同时Producer都不能再将数据存于这些Partition中. 如果Producer使用同步模式则Producer会在尝试重新发送message.send.max.retries(默认值为3)次后抛出Exc…
这篇说说java.util.concurrent.atomic包里的类,总共12个.网上有非常多文章解析这几个类.这里挑些重点说说. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRlcl9aQw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""> 这12个类能够分为三组: 1. 普通类型的原子变量 2. 数组…
文章目录 [隐藏] 一.环境介绍 二.环境安装 1.安装JDK 2.两台服务器安装tomcat 3.nginx安装 4.keepalive安装 三.负载均衡 四.动静分离 五.keepalive高可用 1.遇到的问题1及解决过程 2.遇到的问题2及解决过程 一.环境介绍 基于LVS(linux virtual server)linux虚拟服务器的http集群搭建 环境:使用VMware pro10,CentOS6.5 一共使用4台虚拟机,两台安装Ngnix,两台安装tomcat. 这四台服务器的…
Tomcat文件配置 tomcat解压后目录 bin:可执行文件(startup.bat shutdown.bat) conf:配置文件(server.xml) lib:tomcat依赖的jar文件 log:日志文件(记录出错等信息) temp:临时文件 webapps:可执行的项目(将我们开发的项目 放入该目录) work:存放由jsp翻译成的java,以及编辑 成的lass文件(jsp -> Java -> class) 配置tomcat 配置jdk(必须配置JAVA_HOME) 以此类推…
Digester 是一个依据 xml 配置文件动态构建 Java 对象树的工具,基于 SAX 解析器进行封装,它为 SAX 事件的处理提供了更高级和友好的接口,让开发更专注于要执行的处理,隐藏了 XML 元素详细的层次结构信息. 1. 对象堆栈 为了便于实现,内部使用堆栈存储创建的对象.当满足元素匹配模式时,按预设的处理规则操作栈中对象. 典型的创建对象处理逻辑是,触发创建新对象的规则,在遇到特定 XML 元素的开头时将其推送到栈顶:处理此元素的嵌套内容和属性时,该对象将保留在堆中:当遇到元素的…
一.软件工程知识点 简要总结 1.软件基础知识 瀑布模型: 我感觉整个<软件工程>书的布局就是按照瀑布模型来的,上面右图少个运维. 2.UML图 2.1 用例图 UseCase Diagram 用例图主要回答了两个问题:1.是谁用软件.2.软件的功能. 从用户的角度描述了系统的功能,并指出各个功能的执行者,强调用户的使用者,系统为执行者完成哪些功能. 2.2 类图 Class Diagram 用户根据用例图抽象成类,描述类的内部结构和类与类之间的关系,是一种静态结构图. 在UML类图中,常见的…
目录 相关概念 概述 源码解析 作业提交 划分&提交调度阶段 提交任务 执行任务 结果处理 Reference 本文梳理一下Spark作业执行的流程. Spark作业和任务调度系统是其核心,通过内部RDD的依赖DAG,使得模块之间的调用和处理变得游刃有余. 相关概念 Job(作业):通过行动操作生成的一个或多个调度阶段 Stage:根据依赖关系划分的多个任务集,称为调度阶段,也叫做TaskSet(任务集).划分Stage是由DAGScheduler进行的,任务阶段分为Shuffle Map St…
      假设一种情景,在程序开发中,我们需要在某些数据变化时,其他的类做出相应,例如在游戏中,升级一件装备,会触发玩家金币数量改变,背包数据改变和冷却队列数据改变等等.我们不可能设置setInterval,每隔一段时间就去检测数据有没有发生变化,那样效率很低.我们更希望那些具有变化属性的类能够将自己数据变化这一消息自动推送给希望检测这些变化的其他类.这个时候,”观察者模式“出现了,它能很好地替我们解决了这个问题.这种设计模式工作原理映射到实际生活中,就像我们去医院排队,不能隔两分钟就去问大夫…
解决方案下载地址 帆软大型地产集团项目解决方案 下载地址:http://pan.baidu.com/s/1pJGeqKF帆软地产BI解决方案之KPI考核系统 下载地址:http://pan.baidu.com/s/1sjQj8lB帆软地产BI解决方案之管理驾驶舱 下载地址:http://pan.baidu.com/s/1E2WNW 报表产品Finereport免费试用地址:http://www.finereport.com/products/trial?fr-blog 商业智能产品FineBI免…
类加载器就是根据类的全限定名(例如com.ty.xxx.xxx)来获取此类的二进制字节流的代码模块,从而程序可以自己去获取到相关的类. 一.java中的类加载器   1.类加载器类别 java中的类加载器主要分为三类: Bootstrap ClassLoader:启动类加载器,负责加载<JAVA_HOME>\lib目录中的class文件: Extension ClassLoader:扩展类加载器,负责加载<JAVA_HOME>\lib\ext路径下的class文件: Applica…
我们有一服务器,上面运行着两个mysql实例,这几天iowait一直很高,在20-30%,下午特地专门排查和解决了下,相关过程整理如下. 该服务器有两个挂载盘,服务器在阿里云上,一个系统盘,一个数据盘. 因为非生产库,测试kill -9 mysql-pid后,top如下: 虽然mysql占用内存释放了,但是swap还是占着,虽然swap没有释放,但其不一定会用到,如下: 可见,swap没有活动,但是io很高(block out),bo是写磁盘. 如果不放心swap占用的话,可以通过下列命令释放s…
转发地址:http://www.jintiankansha.me/t/Js1R84GGAl DNS 是 Kubernetes 的核心功能之一,Kubernetes 通过 kube-dns 或  CoreDNS 作为集群的必备扩展来提供命名服务,通过 DNS 扩展,每一个 Service 都会产生一个独一无二的 FQDN(Fully Qualified Domain Name)名称. 在大多数使用场景下,我们并不会太关心 DNS 插件的内部运作细节,直接使用 Kubernetes 预设的 DNS…
对于应用服务器来说,性能是非常重要的,基本可以说决定着这款应用服务器的未来.通常从软件角度来说,应用服务器性能包括如下几个方面: 1.请求处理的并发程度,当前主流服务器均采用异步的方式处理客户端的请求: 2.减少网络传输的数据量,提高网络利用率: 3.降低新建网络链接的开销,以实现链接在多个请求之间的复用: 4.选择合适的I/O方式,例如NIO等. 一.阻塞与非阻塞.同步与异步 ------同步:发出一个调用时,没有得到结果之前,该调用不返回,由调用者主动等待调用结果. | 关注的是消息通信机制…
Connector是Tomcat中非常重要的一个组成部分,说白了,就是如何从客户端获取到相应的请求信息.这部分主要包括的难点有这样几个部分: 1.客户端与服务端的协议 客户端与服务端的协议是多种多样的,Tomcat肯定不能仅仅支持HTTP协议 2.数据I/O方式 I/O通常有NIO.BIO等多种方式,如何提高数据传输的效率? 一.Coyote   1.Coyote简介 Tomcat中的Connector就是Coyote,功能主要是封装了底层的网络通信.为Catalina容器提供了统一的接口,使容…
目录 一.Tomcat顶层架构 二.Tomcat顶层架构小结: 三.Connector和Container的微妙关系 四.Connector架构分析 五.Container架构分析 六.Container如何处理请求的 转自:http://blog.csdn.net/xlgen157387 俗话说,站在巨人的肩膀上看世界,一般学习的时候也是先总览一下整体,然后逐个部分个个击破,最后形成思路,了解具体细节,Tomcat的结构很复杂,但是 Tomcat 非常的模块化,找到了 Tomcat最核心的模块…
引言 最近正好要用到这些内容,因此就找了一篇比较有分量的文章,思来想去,还是尝试写一下译文吧.其实LZ的英语是非常烂的(四级没过的LZ眼泪掉下来),因此这篇文章翻译的水平LZ自己也不敢恭维.各位猿友大致参考一下即可,其中[]符号是LZ的标注,()内的是原文.如果各位有哪里实在看不明白的话,可能是LZ翻译的问题,各位猿友可以去看原文的内容,地址:http://people.apache.org/~mturk/docs/article/ftwai.html. 摘要 倘若你想实现最大的性能和稳定性的话…
一 整体结构 前面tomcat实现原理(一)里面描述了整个tomcat接受一个http请求的简单处理,这里面我们讲下整个tomcat的架构,以便对整体结构有宏观的了解.tomat里面由很多个容器结合在一起,主要有server,service,context,host,engine,wrapper,connector这7个容器来组装.当然了tomcat里面还有其它容器这里就不一一列举,因为我只看重点的.这7个容器存着父子关系,即可以通过当前容器找自己的父容器和自己的子容器.说到这我画了一个简单的结…
1.RAC 是一种: A 分布式数据库B 内存共享多节点数据库C 能够保护数据安全的架构 2.RAC 和CRS 的区别是: A 前者表示一种架构,后者是一套软件B 前者表示一套软件,后者是一种架构 C 它们之间没有关系 3.RAC 的每个节点拥有各自的redo 文件: A 对B 不对C 不一定 4.RAC 的每个节点拥有各自的undo 表空间: A 对B 不对C 不一定 5.RAC 的每个节点拥有各自的temp 表空间: A 对B 不对C 不一定 6.RAC 至少应该配置几个物理IP: A 2…
ThreadPoolExecutor是Executor运行框架最重要的一个实现类.提供了线程池管理和任务管理是两个最主要的能力.这篇通过分析ThreadPoolExecutor的源代码来看看怎样设计和实现一个基于生产者消费者模型的运行器. 生产者消费者模型 生产者消费者模型包括三个角色:生产者,工作队列,消费者.对于ThreadPoolExecutor来说, 1. 生产者是任务的提交者,是外部调用ThreadPoolExecutor的线程 2. 工作队列是一个堵塞队列的接口,详细的实现类能够有非…
要说Tomcat的Classloader机制,我们还得从Bootstrap開始.在BootStrap初始化的时候.调用了org.apache.catalina.startup.Bootstrap#initClassLoaders方法,这种方法里面创建了3个ClassLoader,它们各自是commonLoader,catalinaLoader,sharedLoader,当中catalinaLoader,sharedLoader的父亲载入器是commonLoader,initClassLoader…