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. eclipse打包 jar文件,中文乱码解决方案

    直接通过eclipse浏览源代码时,发现中文注释为乱码的问题.其实这个eclipse默认编码造成的问题.可以通过以下方法解决: 修改Eclipse中文本文件的默认编码:windows->Pref ...

  2. c - 冒泡/选择排序.

    #include <stdio.h> #define LEN 10 #define TRUE 1 #define FALSE 0 /* 对 10 个数进行排序 */ //选择排序法(值得注 ...

  3. 关于控制文件和redo log损坏的恢复

    前段时间一朋友自己电脑上的开发测试用的数据库出了点问题,电脑操作系统是Win8,直接在Win8上安装了Oracle11g,后来系统自动升级到Win8.1,Oracle相关的服务全都不见了,想想把数据文 ...

  4. Javascript获取某个月的天数-简单方法 .(转别人的)

    Javascript里面的new  Date("xxxx/xx/xx")这个日期的构造方法有一个妙处,当你传入的是"xxxx/xx/0"(0号)的话,得到的日期 ...

  5. Java学习笔记--注解

    注解的使用与实例:http://www.cnblogs.com/pepcod/archive/2013/02/16/2913474.html 注解的作用及使用方法:http://wenku.baidu ...

  6. 蚁群算法matlab实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下用matlab实现蚁群算法:   %蚂蚁算法test   %用产生的一个圆上的十个点来检验蚂蚁 ...

  7. 原生js和jquery实现图片轮播特效

    本文给大家分享的是使用原生JS和JQ两种方法分别实现相同的图片轮播特效,十分的实用,也非常方便大家对比学习原生js和jQuery,有需要的小伙伴可以参考下. 1)首先是页面的结构部分对于我这种左右切换 ...

  8. cf B. Vasya and Public Transport

    http://codeforces.com/contest/355/problem/B #include <cstdio> #include <cstring> #includ ...

  9. 拉电流(source current)与灌电流(sink current)

    对一个互补输出的驱动器而言,从输出端向外电路流出的负载电流称为拉电流(SOURCE CURRENT):从外电路流入输出端的负载电流称为灌电流(SINK CURRENT):在没有负载的情况下,驱动器本身 ...

  10. docker_openwrt

    http://wiki.openwrt.org/doc/howto/docker_openwrt_image https://www.baidu.com/s?wd=lxc%20docker&r ...