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. JavaScript toString() 函数详解

    toString()函数用于将当前对象以字符串的形式返回. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. ...

  2. css变形几大属性

    1.transform: transform-function() * | none; transform-function: translate().scale().rotate().skew(). ...

  3. Java多线程练习二

    public class ex3 { public static void main(String [] args) { thread2 t1 = new thread2("hello&qu ...

  4. Qt5.4静态编译方法

    静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库.这样就可以发布单 ...

  5. javascript一些常用函数

    1.indexof 方法可返回某个指定的字符串值在字符串中首次出现的位置. 注释:indexOf() 方法对大小写敏感! 如果要检索的字符串值没有出现,则该方法返回 -1.  例 : 在本例中,我们将 ...

  6. Mysql学习(慕课学习笔记9)查询、分组

    查找记录 Select select username,id from users; Group by 进行分组 select sex from users group by sex; 分组条件 se ...

  7. Android ndk第一步,构建jni headers

    转载请注明出处:http://www.cnblogs.com/fpzeng/p/4281801.html 源码请见 https://github.com/fpzeng/HelloJNI PC系统: u ...

  8. IOC容器MEF在MVC中的使用

    最近想把自己的网站框架用IOC改造下,经过对比,我初步选择autofac,虽然MEF不需要配置,但性能不行,autofac虽然需要自己写自动化注入,但性能非常好. 先分析下各大IOC框架的性能,分两类 ...

  9. setAnimationStyle实现的popwindow显示消失的动画效果

    摘要 popwindow通过setAnimationStyle(int animationStyle)函数来设置动画效果 android:windowEnterAnimation表示进入窗口动画 an ...

  10. hdu 畅通工程

    http://acm.hdu.edu.cn/showproblem.php?pid=1863 #include <cstdio> #include <cstring> #inc ...