TOMCAT 原理篇
一、Tomcat 组成(Tomcat 由以下组件组成)
1.server
a) Server是一个Catalina Servlet容器;
b) Server 可以包含一个或多个service组件(元素)

2.service
a) server 包含了一个engine组件以及一个或多个connector组件;
b) server 中可以配置多个service:
1. 第一个service处理所有Tomcat服务器接收到的web客户端请求;
2. 第二个service处理由Apache服务器转发过来的web客户端请求(SSL);

3.connector
a) connector 属于连接类组件;
b) connector 介于客户端和服务器之间的通信接口,负责将客户端的请求转发给服务器,并将服务器的响应结果传递给客户;

4.engine
a) engine 引擎属于容器类组件;
b) 容器类组件主要是处理客户请求并生成相应的响应结果;
c) engine 容器组件为特定的service组件处理所有的客户请求;

5.host
a) host 虚拟主机组件为特定的虚拟主机处理所有的客户请求;

6.context
a) context 上下文组件为特定的web应用处理所有的客户请求;

二、Tomcat 结构目录说明(假设开发一个名为API的tomcat工程,即<CATALINA_HOME>/webapps/API)
1./API : #WEB应用的根目录,所有的JSP和HTML文件都放在此目录下;
2./API/WEB-INF: #存放web应用的发布描述文件web.xml
3./API/WEB-INF/class: #存放各种class文件,servlet类文件也放在此目录下
4./API/WEB-INF-lib: #存放web应用所需的各种JAR文件

三、Tomcat 配置文件中各个元素说明
1.各个元素的结构关系
<server>
  <service>
    <connector>
    <engine>
      <host>
        <context>
        <context>
      </host>
    </engine>
    </connector>
  </service>
</server>
2.各个元素说明
a) server、service 都属于顶层元素或组件
b) connector 属于连接元素,介于客户和服务器之间的通信接口,负载将客户的请求发送给服务器,并将服务器的响应结果传递给客户;
c) engine、Host、context 等都属于容器元素,主要处理客户请求并生成相应结果的组件;
d) engine 容器元素为特定的service组件处理所有的客户请求;
e) Host 容器元素为特定的虚拟主机处理所有的客户请求;
f) context 容器元素组件为特定的web应用处理所有的客户请求;

四、工作原理
综合以上说明,分析Tomcat Server处理一个http请求的过程来印证工作原理
假设来自客户的请求为:http://localhost:8080/API/notice.jsp

1.当客户发送如上所示的请求时,请求被发送到端口8080,被在那里侦听的connector获得;
2.connector 把该请求交给它所在的service的engine来处理,并等待engine的回应;
3.engine 获得请求localhost/API/notice.jsp,匹配它所拥有的所有虚拟主机Host;
4.engine 匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该host被定义为该engine的默认主机);
5.localhost Host 获得请求/API/notice.jsp,匹配它所拥有的所有Context;
6.Host 匹配到路径为/API的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
7.path="/API"的context获得请求notice.jsp,在它的mapping table中寻找对应的servlet;
8.context 匹配到URL PATTERN为 *.jsp的servlet,对应于JspServlet类;
9.构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法;
10.Context 把执行完了之后的HttpServletResponse对象返回给Host
11.Host 把HttpServletResponse对象返回给Engine
12.Engine 把HttpServletResponse对象返回给Connector
13.Connector把HttpServletResponse对象返回给客户browser

Tomcat 原理篇的更多相关文章

  1. Cesium原理篇:5最长的一帧之影像

    如果把地球比做一个人,地形就相当于这个人的骨骼,而影像就相当于这个人的外表了.之前的几个系列,我们全面的介绍了Cesium的地形内容,详见: Cesium原理篇:1最长的一帧之渲染调度 Cesium原 ...

  2. Cesium原理篇:3最长的一帧之地形(2:高度图)

           这一篇,接着上一篇,内容集中在高度图方式构建地球网格的细节方面.        此时,Globe对每一个切片(GlobeSurfaceTile)创建对应的TileTerrain类,用来维 ...

  3. Cesium原理篇:7最长的一帧之Entity(下)

    上一篇,我们介绍了当我们添加一个Entity时,通过Graphics封装其对应参数,通过EntityCollection.Add方法,将EntityCollection的Entity传递到DataSo ...

  4. Esfog_UnityShader教程_遮挡描边(原理篇)

    咳咳,有段时间没有更新了,最近有点懒!把不少精力都放在C++身上了.闲言少叙,今天要讲的可和之前的几篇有所不同了,这次是一个次综合应用.这篇内容中与之前不同主要体现在下面几点上. 1.之前我们写的都是 ...

  5. 【如何快速的开发一个完整的iOS直播app】(原理篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...

  6. iOS:app直播---原理篇

    [如何快速的开发一个完整的iOS直播app](原理篇) 转载自简书@袁峥Seemygo:http://www.jianshu.com/p/7b2f1df74420   一.个人见解(直播难与易) 直播 ...

  7. 如何快速的开发一个完整的iOS直播app(原理篇)

    目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...

  8. 【转】Android LCD(二):LCD常用接口原理篇

    关键词:android LCD TFT TTL(RGB)  LVDS  EDP MIPI  TTL-LVDS  TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...

  9. 走向DBA[MSSQL篇] 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串

    原文:走向DBA[MSSQL篇] 针对大表 设计高效的存储过程[原理篇] 附最差性能sql语句进化过程客串 测试的结果在此处 本篇详解一下原理 设计背景 由于历史原因,线上库环境数据量及其庞大,很多千 ...

随机推荐

  1. IIS7 常用模块介绍说明

    1.1.0   IIS常用的功能模块介绍: 1)         静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2)         默认文档:允许您配置当用户未在 URL ...

  2. jquery向下取整

    var currentMoney =Math.round((_memberCurrentPoints/_pointVsMoney)*Math.pow(10,2))/Math.pow(10,2) * 2 ...

  3. 对html制作新手的一些建议,大牛可以忽略

    本篇主要讲前端并给制作html页面的新手一些建议,大牛勿喷大牛可以绕过. 感受:我是搞后端开发的,有时拿到一些静态(Html)页面,看到里面的页面结构命名规则极不规范,就有点不好的 感觉了.当然出现这 ...

  4. Linq/List/Array/IEnumerable等集合操作

    来源:http://www.cnblogs.com/liushanshan/archive/2011/01/05/1926263.html 目录 1    LINQ查询结果集    1 2    Sy ...

  5. 新版本的strcpy_s

    char a[32] = "1234"; char b[32] ="123"; strcpy_s(b,sizeof(b), a + 2);//可以用strlen ...

  6. C++中多重继承构造函数执行顺序

    代码1: #include <cstdio> #include <iostream> using namespace std; class A{ public: A(){ co ...

  7. uva 280 - Vertex

    #include <iostream> #include <cstdio> using namespace std; #include <vector> #defi ...

  8. PHPExcel用法有感

    今日项目需求导出excel.我用最简单的header头方式导出了,但是需求部门退回了,说不满足他们的需求,需要我按照他们的模板来导出. 然后想到了PHPExcel,没用过,走了不少弯路. 1.去官网下 ...

  9. 几个个实用的PHP代码片段【自己备份】

    检查服务器是否是 HTTPS 这个PHP代码片段能够读取关于你服务器 SSL 启用(HTTPS)信息. if ($_SERVER['HTTPS'] != "on") { echo ...

  10. text-align:justify小例子

    一个使用 text-align: justify; 使元素均匀分布的小例子: <!DOCTYPE html> <html lang="en"> <he ...