Tomcat源码分析(一)
这段时间简单的看了一下Tomcat的源码,在这里做个笔记!
1. tomcat 架构图

Catalina: tomcat的顶级容器,main()方法中就是通过,创建Catalina 对象实例,来启动或者关闭 tomcat;
Server: 是管理tomcat所有组件的容器,包含一个或多个的service;
Service: Service是包含Connector和Container的集合,Service用适当的Connector接收用户的请求,再发给相应的Container来处理;
Connector: 主要功能是 ◇socket的接收 ◇根据协议类型处理socket ◇封装相应的request和response,交给Container;
Container: Engine容器接收来自Connector的请求,并且通过Pipeline依次传递给子容器的Pipeline;
Engine: 在Engine的Pipeline中的Valve的invoke方法中,根据request.getHost()来定位下一个host;
Host: 一个Web服务器虚拟机,管理着具体的 web application;
Context: 就是我们所部属的具体Web应用的上下文,每个请求都是在具体的上下文中处理;
Wrapper:对应着Web的每一个 Servlet;
接下来,主要学习tomcat中的两个最主要的容器,Connector和Container容器。
2. Connector容器
Connector容器主要解决的问题就是Socket的接收,为了能够很好的处理各种协议和并发异步接收,Connector加入了两个组件 ProtocolHandler和EndPoint。
ProtocolHandler的主要作用就是根据各个协议的定义按照一定的格式句分析协议头,封装成request和response对象;
AbstractEndPoint 致力于高并发的解决socket的接收和处理;
2.1 AbstractEndPoint
EndPoint 中两个协同合作的Runnable:
(1) Accepter负责用ServerSocket.accept()来接收客户请求,并且把建立连接之后的Socket交由Poller处理;
(2) Poller负责接收请求,并处理;
protected class Acceptor extends AbstractEndpoint.Acceptor (Acceptor implements Runnable) public class Poller implements Runnable
Accepter和Poller的具体写作示意图(个人拙见)

从上图中,我们可以发现,Acceptor接收到一个用户的socket请求之后,将这个Socket封装成PollerEvent,放入events队列中。Poller实际上,一直while(true),当执行events队列中有PollerEvent的时候,就会从自己的Selector中获取到一个有数据的Channel,交给ProcessKey()处理。
2.1 ProtocolHandler
每一种协议都有各自具体定义,和具体的协议头的格式,那么我么在接收到客户请求之后,就应该根据协议的类型采用相应的解析方法。
ProtocolHandler的具体作用:
◆ 定义具体处理Socket的AbstractEndPoint;
◆ 提供解析请求的AbstractConnectionHandler来获取具体的协议头;
◆ 相关的init、start、stop方法
【参考文献】
[1] http://blog.csdn.net/cutesource/article/details/5006062
[2] http://blog.csdn.net/yanlinwang/article/details/45648039
Tomcat源码分析(一)的更多相关文章
- tomcat源码分析(三)一次http请求的旅行-从Socket说起
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- Tomcat源码分析
前言: 本文是我阅读了TOMCAT源码后的一些心得. 主要是讲解TOMCAT的系统框架, 以及启动流程.若有错漏之处,敬请批评指教! 建议: 毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, ...
- Tomcat源码分析之—具体启动流程分析
从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...
- Tomcat源码分析--转
一.架构 下面谈谈我对Tomcat架构的理解 总体架构: 1.面向组件架构 2.基于JMX 3.事件侦听 1)面向组件架构 tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成 ...
- tomcat 源码分析
Tomcat源码分析——Session管理分析(下) Tomcat源码分析——Session管理分析(上) Tomcat源码分析——请求原理分析(下) Tomcat源码分析——请 ...
- Tomcat源码分析——Session管理分析(下)
前言 在<TOMCAT源码分析——SESSION管理分析(上)>一文中我介绍了Session.Session管理器,还以StandardManager为例介绍了Session管理器的初始化 ...
- Tomcat源码分析——Session管理分析(上)
前言 对于广大java开发者而已,对于J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session用来存放用户登录.身份.权限及状态等信息.对 ...
- Tomcat源码分析——请求原理分析(下)
前言 本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过<TOMCAT源码分析——请求原理分析(上)>和<TOMCAT源码分析——请求原理分析(中)>.在& ...
- Tomcat源码分析——请求原理分析(中)
前言 在<TOMCAT源码分析——请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT源码分析——请求原 ...
随机推荐
- Spark源码分析之Spark Shell(上)
终于开始看Spark源码了,先从最常用的spark-shell脚本开始吧.不要觉得一个启动脚本有什么东东,其实里面还是有很多知识点的.另外,从启动脚本入手,是寻找代码入口最简单的方法,很多开源框架,其 ...
- SpringMVC简版教程、部分功能
注:本文只用注解来实现 前言 SpringMVC各种流程图流程图(其他的各种流程图) jsp.xml.action彼此之间的关系,都如何使用 spring-mvc.xml如何配置,放在哪里? acti ...
- [Hadoop] - Hadoop Mapreduce Error: GC overhead limit exceeded
在运行mapreduce的时候,出现Error: GC overhead limit exceeded,查看log日志,发现异常信息为 2015-12-11 11:48:44,716 FATAL [m ...
- vc中Error spawning cl.exe错误的解决方法.
可能很多人在安装VC 6.0后有过点击“Compile”或者“Build”后被出现的 “Compiling... ,Error spawning cl.exe”错误提示给郁闷过.很多人的 选择是重装, ...
- java学习书籍推荐
1. Java 语言基础 谈到Java 语言基础学习的书籍,大家肯定会推荐Bruce Eckel 的<Thinking in Java >.它是一本写的相当深刻的技术书籍,Java 语言基 ...
- Linux系统(四)负载均衡LVS集群之NAT模式
序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...
- 2017-2-21 C#基础 if条件语句,作用域
今天学了if 条件语句和作用域.作用域可以用一句话来概括:儿子可以用爹的所有东西,爹不可以用儿子的任何东西.If条件语句我用几个练习题来解释. 1."请输入年份:" 判断是否是闰年 ...
- 字符串查找算法总结(暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法)
字符串匹配是字符串的一种基本操作:给定一个长度为 M 的文本和一个长度为 N 的模式串,在文本中找到一个和该模式相符的子字符串,并返回该字字符串在文本中的位置. KMP 算法,全称是 Knuth-Mo ...
- Strtus2 S2-045漏洞
S2-045漏洞已经爆发几天了,但还很多网址都存在此漏洞,很多金融类网站也收到了保护费通知...唉,收保护费少,报警无效!只能酌情处理了!做黑产的,还是少做为秒,常在河边站哪有不湿鞋,劝各位早日金盆洗 ...
- Intelligent idea高效实用总结
一直使用eclipse,最近才转到idea IDE上面来,的确从效率等多个角度,idea都要优于eclipse.由于刚实用idea,不是很熟练,将常用的技巧总结集锦一下,方便以后查看,慢慢积累吧 一. ...