Tomcat 原理篇
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 原理篇的更多相关文章
- Cesium原理篇:5最长的一帧之影像
如果把地球比做一个人,地形就相当于这个人的骨骼,而影像就相当于这个人的外表了.之前的几个系列,我们全面的介绍了Cesium的地形内容,详见: Cesium原理篇:1最长的一帧之渲染调度 Cesium原 ...
- Cesium原理篇:3最长的一帧之地形(2:高度图)
这一篇,接着上一篇,内容集中在高度图方式构建地球网格的细节方面. 此时,Globe对每一个切片(GlobeSurfaceTile)创建对应的TileTerrain类,用来维 ...
- Cesium原理篇:7最长的一帧之Entity(下)
上一篇,我们介绍了当我们添加一个Entity时,通过Graphics封装其对应参数,通过EntityCollection.Add方法,将EntityCollection的Entity传递到DataSo ...
- Esfog_UnityShader教程_遮挡描边(原理篇)
咳咳,有段时间没有更新了,最近有点懒!把不少精力都放在C++身上了.闲言少叙,今天要讲的可和之前的几篇有所不同了,这次是一个次综合应用.这篇内容中与之前不同主要体现在下面几点上. 1.之前我们写的都是 ...
- 【如何快速的开发一个完整的iOS直播app】(原理篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...
- iOS:app直播---原理篇
[如何快速的开发一个完整的iOS直播app](原理篇) 转载自简书@袁峥Seemygo:http://www.jianshu.com/p/7b2f1df74420 一.个人见解(直播难与易) 直播 ...
- 如何快速的开发一个完整的iOS直播app(原理篇)
目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...
- 【转】Android LCD(二):LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...
- 走向DBA[MSSQL篇] 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串
原文:走向DBA[MSSQL篇] 针对大表 设计高效的存储过程[原理篇] 附最差性能sql语句进化过程客串 测试的结果在此处 本篇详解一下原理 设计背景 由于历史原因,线上库环境数据量及其庞大,很多千 ...
随机推荐
- python模块基础之OS模块
OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作. 可以查看OS模块的帮助文档: >>> import os #导入os模块 ...
- (转)ligerUI 使用教程之Tip介绍与使用
概述: ligertip是ligerUI系列插件中的tooltip类插件,作用是弹一个浮动层,起提示作用 阅读本文要求具备jQuery的基本知识,不然文中的javascript代码不易理解 截 ...
- PullToRefresh的使用
主界面↓ package com.wangzhen.pulltorefresh; import java.util.ArrayList; import java.util.List; import c ...
- java下管道流 PipedOutputStream 与PipedInputStream
package cn.stat.p2.demo; import java.io.IOException; import java.io.PipedInputStream; import java.io ...
- Oracle—用户管理的备份(二)
在用户管理的备份(一)中(详见:Oracle—用户管理的备份)对用户管理备份几种情况进行了说明:接下来说明几种特别情况和DBverify的使用. 一.如果在表空间在备份模式下,主机发生了异常关闭,会出 ...
- C#Mysql数据库爆破源码
声明: 代码仅供学习参考使用!开启了一个子线程,进行爆破! 速度不是很快,代码不是很规范,希望大牛不要喷我! c#控制台程序,需要引用MySql.Data.dll 默认用户名: root密码字典: p ...
- MySQL跨表更新字段 工作记录
工作中遇到两表查询,从user表中获取用户唯一id字段 写入到另外一张qiuzu表中的uid字段中; 二者可以关联起来的只有用户的手机号码tel字段; 了解需求后数据量稍多,不可能一个一个的手动修改 ...
- dubbo No provider available for the service com.alibaba.dubbo.monitor.MonitorService from registry
No provider available for the service com.alibaba.dubbo.monitor.MonitorService from registry http:// ...
- php 中_set()_get()实例解析
<?php class Person { // 下面是人的成员属性, 都是封装的私有成员 private $name; // 人的名子 private $sex; // 人的性别 private ...
- Python中urlopen()介绍
#以下介绍是基于Python3.4.3 一. 简介 urllib.request.urlopen()函数用于实现对目标url的访问. 函数原型如下:urllib.request.urlopen( ...