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 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长. ...
随机推荐
- Mybatis的dao层实现 接口代理方式实现规范+plugins-PageHelper
Mybatis的dao层实现 接口代理方式实现规范 Mapper接口实现时的相关规范: Mapper接口开发只需要程序员编写Mapper接口而不用具体实现其代码(相当于我们写的Imp实现类) Mapp ...
- (四)HTTP消息报头
HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成.请求消息和响应消息都是由开始行,消息报头,空行(只有CRLF的行),消息正文组成.对于请求消息,开始行就是请求行:对于响应消息,开始行就是 ...
- 使用 C# 9.0 新语法提升 if 语句美感
C# 语言一贯秉承简洁优美的宗旨,每次升级都会带来一些语法糖,让我们可以使代码变得更简洁.本文分享两个使用 C# 9.0 提升 if 语句美感的技巧示例. 使用属性模式代替 IsNullOrEmpty ...
- Typora设置Vue主题
平时看视频,发现好多老师使用 Typora 时,界面跟我的不一样,好看一些,后来查了下才知道老师使用了Vue主题,接下来我就记录下设置Vue主题的步骤吧 一.下载Vue主题 地址:http://the ...
- 像用excel一样用pandas
1 说明 预计需要15min阅读此教材: 本教材仅讲述如何查看excel数据,筛选,排序,查找替换数据,不涉及excel中复杂的图形绘制及样式修改. 2 假设 假设,已经存在一个test.xlsx文件 ...
- codeforces 1425E,一万种情况的简单题
大家好,欢迎阅读codeforces专题. 我们今天选中的是codeforces 1425场比赛的E题,这是一场印尼多校联合的ICPC的练习赛.ACM赛制,难度也比较近似.我们今天选择的是其中的一道M ...
- Android序列化问题与思考
今天再来谈谈Android中的对象序列化,你了解多少呢? 序列化指的是什么?有什么用 序列化指的是讲对象变成有序的字节流,变成字节流之后才能进行传输存储等一系列操作. 反序列化就是序列化的相反操作,也 ...
- kali中PHANTOM-EVASION 3.0运行时module ' OpenSSL.crypto' has no attribute ' PKCS12Type'报错解决方法
kali中直接用pip install pyopenssl安装当最新的openssl中的crypto中的类PKCS12Type改成了PKCS12 所以需要在phantom中改对应代码 将这个文件中对应 ...
- Mongodb和Hbase的对比
Mongodb和Hbase的对比 1.Mongodb bson文档型数据库,整个数据都存在磁盘中,hbase是列式数据库,集群部署时每个familycolumn保存在单独的hdfs文件中. 2.Mon ...
- npm pm2
安装 npm install -g pm2 用法 $ npm install pm2 -g # 命令行安装 pm2 $ pm2 start app.js -i 4 # 后台运行pm2,启动4个app. ...