web服务器专题:tomcat基础及模块
Web服务器专题:Tomcat(一)基础架构
针对java系的经典服务器,打算系统的整理一下Tomcat的机制和一些原理,以此记录。
插一则题外话,关于tomat这个名字的由来:Tomcat 名称的由来
1、关于Tomcat
基础的 tomcat 内容就不过多赘述了,基本的百度百科都可以看到,在这里我想从catlina入手介绍一下tomcat,我想很多人刚开始接触tomcat,不论是日志里,bin目录下的脚本里,都会看见catlina这个东西,都会很困惑,什么是 Catlina,说到 Catlina,就要介绍一些tomcat相比于Apache 的不同之处,简单来说,Apache主要用来处理网络中的静态资源请求(HTML,CSS、图片等),而tomcat是专为java的servlet而生的,简单来说就是为J2EE提供环境的, 用来解析动态的资源处理(即后端的业务处理,动态数据等)的部分就被称为 Catlina。
tomcat 继承了Apache 作为web服务器的基本功能,本身包含了三个重要的组成:
处理 html, js, css等 静态页面的Web容器;
根据不同的请求来调用不同的servlet的servlet容器Catlina;
编译jsp的引擎Jasper
简单来说,其实Catlina就是一个Servlet容器,它也是tomcat区别于其他服务器的核心,整个Tomcat最核心的事就是进行Servlet的管理和根据前端的请求进行调度。

2、Tomcat的目录层级及常用文件
首先简单记录一下Tomcat的文件目录及一些常用的文件。
Tomcat的目录:
|---bin://存放启动和关闭tomcat脚本
|---conf://存放不同的配置文件(server.xml和web.xml);
|---doc://存放Tomcat文档;
|---lib/japser/common://存放Tomcat运行需要的库文件(JARS);
|---logs://存放Tomcat执行时的LOG文件;
|---src://存放Tomcat的源代码;
|---webapps://Tomcat的主要Web发布目录(包括应用程序示例);
|---work://存放jsp编译后产生的class文件;
以上目录中,一般我们基本开发部署中常用的基本就 bin 、conf 、logs三个,其中 tomcat 的系统级启动shell、bat文件均在bin目录下,具体环境变量及启动流程,都可以在start.sh或start.bat中查看源码,这里就不多说了,就主要说一下 conf 目录下的文件吧:
server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;
tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用 户指定角色等将通过编辑此文件实现;
catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;
catalina.properties:Tomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设 置;
logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的 组件级别以及日志文件的存在位置等;
context.xml:所有host的默认配置信息;
3、Tomcat架构
Tomcat的设计是基于模块化设计的,内部主要依赖于不同的模块组件构成, 这里打算图解一下Tomcat的内置组件及 一条请求的主要流程,话不多说,先上图:

一句话简单概括,一个tomcat只有一个Server作为根,它管理着多个Service服务,而Service服务又管理着多个Connector以及一个Container,其中核心组件为Connector以及Container。
Server组件
从图中可以看出,一个Tomcat只能有一个Server,Server就是一个Tomcat的实例。
Service组件
Service其实是一个集合,它将Connector组件与Container组件包装组合在一起(一个Service可以有多个Connector和一个Container),对外进行服务,而Service又是运行在Server中,也就是说,一个Tomcat可以有多个service
Connector组件
该组件主要负责监听指定端口的客户端请求(不同端口对应不同的Connect组件),将Socket请求过来的数据,都封装成Request请求对象,同时将该请求对象 传递给Container容器进行下一步的处理。
Container组件
Container组件才是最接近Web应用的组件,它负责根据请求进行一系列的servlet调用,本身Container又包含四个子容器:Engine、Host、Context、Wrapper
Container的容器组合如下图:

Engine :引擎,用来管理多个站点, 一个Service最多只能有一个Engine;Host :代表一个站点,也可以叫虚拟主机,通过配置Host 就可以添加站点;Context :代表一个应用程序,即为我们开发的一个war服务在webapp目录下的各个应用,或者一个WEB-INF 目录以及下面的web.xml 文件;Wrapper :每个Wrapper 封装着一个servlet
一次完整的流程:
1、当我们浏览器点击事件发生,发送了一个http/https的请求,首先到达tomcat,即运行的实例server中
2、该请求被监听 8080 端口的 connector监听到,获取请求报文后,封装成Request请求,并将该请求发往Engine
3、Engine根据请求的url,搜寻使用哪个Host
4、当相应的Host获取该请求后,根据请求中的地址,找寻相应的Context来处理该请求
5、Context根据其内部的映射表,获取相应的servlet,并构造HttpServletRequest对象和HttpServletResponse对象,进行业务处理
6、Context将处理完的HttpServletResponse对象返回给Host
7、Host再将结果返回Engine
8、Engine中心调度,将结果返回给 connector
9、connector将结果返归给客户端

web服务器专题:tomcat基础及模块的更多相关文章
- web服务器专题:tomcat(二)模块组件与server.xml 配置文件
web服务器专题:tomcat(二)模块组件与server.xml 配置文件 回顾: Web服务器专题:tomcat(一) 基础模块 一个Server.xml的实例 <?xml version= ...
- web服务器专题:tomcat(三)tomcat-user.xml 配置文件
回顾:web服务器专题:tomcat(二)模块组件与server.xml 配置文件 Tomcat管理模块 安装Tomcat后,访问127.0.0.1/8080可以看到这个首页,上图中的三个按钮即为To ...
- WEB服务器,TOMCAT和servlet之间的关系
WEB服务器,TOMCAT和servlet之间的关系 什么是WEB服务器Web服务器是指能够为发出请求的浏览器提供文档的程序.服务器是 一种被动程序,只有浏览器发出请求的时候才会响应.应用层使用 的是 ...
- WEB服务器(Tomcat)
在小型的应用系统或有特殊需要的系统中,也可以使用一个免费的Web服务器: Tomcat,该服务器支持全部的JSP以及Servlet 规范, 下载 Tom 查看计算机上被占用端口号的情况: 使用Fpor ...
- web服务器与tomcat
web服务器与tomcat 服务器分类: 硬件服务器和软件服务器 web服务器: 提供资源供别人访问 web: 网页的意思,资源. web资源分类: 动态的web资源:内容有可能发生改变的 静态的we ...
- web服务器、tomcat、servlet是什么?它们之间的关系又是什么?
今天偶然看到常见web服务器的介绍有Apache HTTP server.Nginx.Microsoft IIS.GWS,心中不禁产生了疑问,这些都是什么呢?一直认为tomcat就是web服务器,以下 ...
- Web服务器和Tomcat
Web服务器常用: WebLogic:是BEA公司的推出的产品,现在已经被oracle收购,是目前应用最广泛的Web服务器,支持JavaEE规范,商用收费,开发者可以免费使用. WebSphere:I ...
- JavaWeb--基本概念、Web服务器与Tomcat
前言 Java Web 其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件. 整个javaWeb阶段的内容通过实际的案例贯穿学习, 所涉及到的技术知识点会 ...
- asp.net 问题:Web 服务器上的请求筛选模块被配置为 拒绝包含的查询字符串过长的请求
发现问题: post请求,在发送一个图片base64编码的字符串时,服务端报这个错误. 报错信息中给出了解决办法: 最可能的原因: Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长. ...
随机推荐
- 重载符operator() -- effective c++ 3rd P71的的隐式类型转换及相关的研究
class的"operator 返回类型 ()" 的重载 就是对(class)的重载,这个重载符不用参数,参数就是自身,并且与函数传递的参数括号等价 如 func(c), 并且多个 ...
- CSS换行和省略号
换行 原地址:https://www.cnblogs.com/meowcool/p/10130103.html //强制不换行 div{ white-space:nowrap; } //自动换行 di ...
- 【Kata Daily 190929】Password Hashes(密码哈希)
题目: When you sign up for an account somewhere, some websites do not actually store your password in ...
- leetcode117search-in-rotated-sorted-array
题目描述 给出一个转动过的有序数组,你事先不知道该数组转动了多少 (例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2). 在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引, ...
- python爬虫10 b站爬取使用 selenium+ phantomJS
但有时候 我们不想要让它打开浏览器去执行 能不能直接在代码里面运行呢 也就是说 有没有一个无形的浏览器呢 恩 phantomJS 就是 它是一个基于 WebKit 的浏览器引擎 可以做到无声无息的操作 ...
- 11 幂等 Idempotence
11 幂等 Idempotence HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用.(注意是副作用) GET http://www.bank.com/account/123456 ...
- 利用 Docker 构建一个简单的 java 开发编译环境
目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本.如果想切换自己本地的 Java 开发环境 ...
- .NetMvc从http或本地下载pdf文件
1.帮助类 1 public static class PdfHelper 2 { 3 #region 从http链接下载 4 public static void Download(string u ...
- [收藏] 传说中的12306买票插件-chrome专用
12306.cn买票,难死了,登录登录登录... 现在不用了... js插件+chrome浏览器: /* * 12306 Auto Query => A javascript snippet t ...
- Java实现本地小数据量缓存尝试与实践&设计思考
话不多说先贴代码 /** * 缓存工具 */ public class ConcurrentHashMapCacheUtils{ /** * 当前缓存个数 */ public static Integ ...