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又包含四个子容器:EngineHostContextWrapper

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基础及模块的更多相关文章

  1. web服务器专题:tomcat(二)模块组件与server.xml 配置文件

    web服务器专题:tomcat(二)模块组件与server.xml 配置文件 回顾: Web服务器专题:tomcat(一) 基础模块 一个Server.xml的实例 <?xml version= ...

  2. web服务器专题:tomcat(三)tomcat-user.xml 配置文件

    回顾:web服务器专题:tomcat(二)模块组件与server.xml 配置文件 Tomcat管理模块 安装Tomcat后,访问127.0.0.1/8080可以看到这个首页,上图中的三个按钮即为To ...

  3. WEB服务器,TOMCAT和servlet之间的关系

    WEB服务器,TOMCAT和servlet之间的关系 什么是WEB服务器Web服务器是指能够为发出请求的浏览器提供文档的程序.服务器是 一种被动程序,只有浏览器发出请求的时候才会响应.应用层使用 的是 ...

  4. WEB服务器(Tomcat)

    在小型的应用系统或有特殊需要的系统中,也可以使用一个免费的Web服务器: Tomcat,该服务器支持全部的JSP以及Servlet 规范, 下载 Tom 查看计算机上被占用端口号的情况: 使用Fpor ...

  5. web服务器与tomcat

    web服务器与tomcat 服务器分类: 硬件服务器和软件服务器 web服务器: 提供资源供别人访问 web: 网页的意思,资源. web资源分类: 动态的web资源:内容有可能发生改变的 静态的we ...

  6. web服务器、tomcat、servlet是什么?它们之间的关系又是什么?

    今天偶然看到常见web服务器的介绍有Apache HTTP server.Nginx.Microsoft IIS.GWS,心中不禁产生了疑问,这些都是什么呢?一直认为tomcat就是web服务器,以下 ...

  7. Web服务器和Tomcat

    Web服务器常用: WebLogic:是BEA公司的推出的产品,现在已经被oracle收购,是目前应用最广泛的Web服务器,支持JavaEE规范,商用收费,开发者可以免费使用. WebSphere:I ...

  8. JavaWeb--基本概念、Web服务器与Tomcat

    前言 Java Web 其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件. 整个javaWeb阶段的内容通过实际的案例贯穿学习, 所涉及到的技术知识点会 ...

  9. asp.net 问题:Web 服务器上的请求筛选模块被配置为 拒绝包含的查询字符串过长的请求

    发现问题: post请求,在发送一个图片base64编码的字符串时,服务端报这个错误. 报错信息中给出了解决办法: 最可能的原因: Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长. ...

随机推荐

  1. [P2114] [NOI2014]起床困难综合症 (位运算)

    题面 传送门:https://www.luogu.org/problemnew/show/P2114 Solution 一道很有意思的位运算题. 要做这一题,我们首先得了解一个很重要的特点 位运算过程 ...

  2. 在springmvc.xml中定义全局的异常处理

    在Controller类的内部方法上使用@ExceptionHandler,则此类的方法抛出未处理的异常时,回到此方法上处理. @ExceptionHandler可以指定异常的类型,会自动进行匹配 如 ...

  3. 漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃monkey日志

    漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃日志 1.APP崩溃率标准 开发或测试app的同学,对于app崩溃肯定非常熟悉,频繁的线上崩溃属 ...

  4. 【Kata Daily 190918】Spacify(插空)

    题目: Modify the spacify function so that it returns the given string with spaces insertedbetween each ...

  5. 内网渗透 day7-linux信息收集

    linux信息搜集 目录 1. linux信息搜集 2. nmap漏洞复现 3. msf linux模块反弹shell 1. linux信息搜集 id 查看当前用户的权限和所在的管理组 python ...

  6. [MIT6.006] 6. AVL Trees, AVL Sort AVL树,AVL排序

    之前第5节课留了个疑问,是关于"时间t被安排进R"的时间复杂度能不能为Ο(log2n)?"和BST时间复杂度Ο(h)的关系.第6节对此继续了深入的探讨.首先我们知道BST ...

  7. Open-Falcon 告警 如何实现自定义多功能告警

    Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案.其中有着如下的特点: ①强大灵活的数据采集:自动发现,支持falcon-agent.snmp.支持用户主动push.用户自定 ...

  8. shell 脚本之set 命令(转)

    服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节. set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题.本文介绍它的基本用法,让你可以更安心地使用 ...

  9. 预估ceph的迁移数据量

    引言 我们在进行 ceph 的 osd 的增加和减少的维护的时候,会碰到迁移数据,但是我们平时会怎么去回答关于迁移数据量的问题,一般来说,都是说很多,或者说根据环境来看,有没有精确的一个说法,到底要迁 ...

  10. Blazor入手教程(一)前言

    Blazor入手教程(一)前言 结论 最近在学习blazor.得出了这么一个结论: Blazor是一门很值得学习的技术,未来.net下将会有相当多的 web应用使用blazor开发.十分看好这一技术, ...