tomcat源码分析(一)从tomcat架构说起
p { margin-bottom: 0.25cm; line-height: 120% }
catalina下还定义了tomcat容器(server,service,engine,host,context)的接口。其中对接口的实现也在该包下,org.apache.catalina.core下。包括tomcat管道机制,各个wraper的实现也在这个包下,因此这也是tomcat最为核心东一个包。
我们再来看下connector,见名知意,这个包是负责处理请求的,最终请求会进入到这个包下的CoyoteAdapter中service方法来处理。
我们继续来说下coyote这个包,这个包偏底层一些,其会对socket传输来的数据进行包装,然后再转给实现来Adapter接口的类,其中具体实现也是由catalina下的CoyoteAdapter来实现,这个包下主要是对TCP/IP传输来东数据进行处理,其由两种实现方式,一种是采用ajp协议,另外一种则是采用http协议,简单来说,这个包就是把TCP/IP(通过Socket)层传输来的对象进行包装,包装为ajp或者http的对象,然后转发到catalina下的connector中进行处理。
接下来我们简单对tomcat这个包做下分析,其中核心在于util包下,其中threads包下是tomcat对线程池做了自己的扩展(在Executor框架基础上)。其中最核心的地方在于net包下,这个包是真正来出来网络的,即请求过来会首先来到这个包下(注意:现在还是处于TCP/IP层面上并没有到来http层面),其中JIOEndpoint也是由我们核心去分析的,该类是实际处理Socket请求,其中如何接受请求并将请求转到工作线程去处理都是在这个包下来实现。
说完了tomcat的代码package组织,我们继续来看看Tomcat的架构图,下图是我从网上搜到的一幅架构图,基本能完整的说明其架构。

我们开始详细来说明一下Tomcat的各个结构。在这张架构图中我们看到了tomcat的容器机构,其最大的容器为server,server下包含1至N个service容器,service容器下又包含1至N个Engine容器,Engine容器下则包含1至N个Host容器(Host即对应我们的域名),同样,Host容器则包含1至N个Context容器(Context也就是我们通常的JavaWeb应用)。在实际生成环境中,我们通常只会有一个Server容器,一个Service容器,一个Engine容器,但经常会有多个Host容器,多个Context容器(往往也是一个Host下只有一个Context),尤其是在分布式的环境下,往往是多个Host容器。在这里还要特殊说明一下Connector,Connector是在Service容器之中,tomcat默认会配置两个Connector,一个Connector是负责处理http协议,另一个Connector则是负责处理tomcat自身的一种协议ajp,后续我们会对http协议的Connector作为详细阐述。
凡是用过Tomcat的开发者一定也会对tomcat下conf文件夹中的server.xml文件有一定的了解。其server.xml大致如下。其中server.xml的最大的父节点是server,该server其接口规范是由org.apache.catalina.Server这个接口定义,其具体实现由org.apache.catalina.core.StandardServer实现,在后续的文章中我们会对其进行具体阐述。同理,Engine、Host、Context容器也在org.apache.catalina该包下有其特定的接口规范,其实现都在org.apache.catalina.core这个包下。
p { margin-bottom: 0.25cm; line-height: 120% }
下一节我们会对Tomcat的父子容器进行具体的阐述。
tomcat源码分析(一)从tomcat架构说起的更多相关文章
- Tomcat源码分析三:Tomcat启动加载过程(一)的源码解析
Tomcat启动加载过程(一)的源码解析 今天,我将分享用源码的方式讲解Tomcat启动的加载过程,关于Tomcat的架构请参阅<Tomcat源码分析二:先看看Tomcat的整体架构>一文 ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat
概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...
- Tomcat源码分析二:先看看Tomcat的整体架构
Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Conn ...
- Tomcat源码分析--转
一.架构 下面谈谈我对Tomcat架构的理解 总体架构: 1.面向组件架构 2.基于JMX 3.事件侦听 1)面向组件架构 tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成 ...
- Tomcat源码分析——请求原理分析(下)
前言 本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过<TOMCAT源码分析——请求原理分析(上)>和<TOMCAT源码分析——请求原理分析(中)>.在& ...
- Tomcat源码分析——请求原理分析(中)
前言 在<TOMCAT源码分析——请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT源码分析——请求原 ...
- Tomcat 源码分析(转)
本文转自:http://blog.csdn.net/haitao111313/article/category/1179996 Tomcat源码分析(一)--服务启动 1. Tomcat主要有两个组件 ...
- Tomcat源码分析(二)------ 一次完整请求的里里外外
Tomcat源码分析(二)------ 一次完整请求的里里外外 前几天分析了一下Tomcat的架构和启动过程,今天开始研究它的运转机制.Tomcat最本质就是个能运行JSP/Servlet的Web ...
随机推荐
- 关于phpmyadmin的小笔记
默认情况下,phpmyadmin联系的是localhost. 如果此时hostname不是localhost而是其它什么的话,在phpmyadmin是不能连接上的,虽然在命令行mysql -h loc ...
- Net中httpResponse和httpRequest的简单实用;
这对象很简单,封装很多常用的方法和属性:使用起来也很方便: 这个关键是要对我们的 http中的各种协议要很了解滴呀: 模拟一个简单的暴力破解: public static class HttpInfo ...
- vim - Convert between hex and decimal
http://vim.wikia.com/wiki/VimTip448 ga g8
- H5唤起APP一些坑
$(function () { function _openAppUrl(appUrl){ var ua = navigator.userAgent.toLocaleLowerCase(), open ...
- REmap首次尝试--PC端
在REchart项目中,实验此网址的内容,得到若干实例 针对此我针对北京市做了若干实验 第一:绘制北京市的填充地图 代码如下: >BJqu<-mapNames("beijing& ...
- rhel 7.0, windows10双系统grub2设置
因为在win10基础上装了rhel7,但是启动时却没有win10的启动项,下面的方法解决此问题. $ su #root登录 $ cd /boot/grub2 1. 简单执行grub2-mkconfig ...
- $.Callbacks()
<script> var cb = $.Callbacks(); //Callbacks(option) 有4个参数,可以多个参数写一起,空格分隔开 //once 多个fire() 只触发 ...
- Windows Phone 二十、陀螺仪
API 示例 // 获取陀螺仪传感器监听对象 Gyrometer gyrometer = Gyrometer.GetDefault(); if (gyrometer == null) { await ...
- qq
引用:http://blog.sina.com.cn/s/blog_9e2e84050101blqz.html 腾讯QQ使用何种开发平台? 腾讯QQ的开发分客户端软 ...
- C++之检测文件结尾
当使用文件作为输入流时,为了确保适时的结束文件读取操作,程序要靠检查文件尾来判断该何时停止读取.常用的检查文件尾方法有两种: 两种方式均已将 fin 与文件关联,即 均已声明 fin 输入流,并已调用 ...