Tomcat详细讲解(巨详细!!!)

tomcat的工作流程:

前言:

Tomcat是一个开源的Java Web应用服务器,Java Web应用服务器,这个概念听起来有点专业,但其实用通俗的语言来解释并不难理解。

首先,我们得知道Web应用是什么。简单来说,Web应用就是我们平时在网页上能看到的、能与之交互的那些东西,比如网上商城、社交媒体平台等。这些Web应用背后,需要有一个“服务员”来为我们提供服务,这个“服务员”就是Web应用服务器。

而Java Web应用服务器,就是专门用Java语言编写的,用来运行和提供Java Web应用服务的服务器。它就像是一个“厨房”,我们的Java Web应用就像是“菜品”,而用户就像是“顾客”。当用户(顾客)通过浏览器发送请求时,Java Web应用服务器(厨房)就会根据请求去准备相应的“菜品”(运行相应的Java Web应用),然后返回给用户(顾客)。

这个过程中,Java Web应用服务器会处理很多复杂的事情,比如解析HTTP请求、处理业务逻辑、访问数据库、生成HTML页面等。而且,它还能管理多个用户(顾客)的请求,确保它们都能得到及时、准确的处理。

常见的Java Web应用服务器有Tomcat、JBoss、WebLogic等。其中,Tomcat是最流行的一个,它免费、开源,而且性能稳定,非常适合用于开发和部署Java Web应用。

所以,简单来说,Java Web应用服务器就是一个专门用来运行和提供Java Web应用服务的“服务员”,它能让我们的Web应用在互联网上“开业迎客”。

tomcat的构成:

1,tomcat包括五大容器和一个连接器,五大容器是Service、Engine、Host、Context、Wrapper,Connector。

2,tomcat的文件目录:

bin:存放可执行的文件,如startup和shutdown。

conf:存放配置文件,如核心配置文件server.xml和应用默认的部署描述文件web.xml。

lib:存放Tomcat运行需要的jar包。

logs:存放运行的日志文件。

webapps:存放默认的web应用部署目录。

work:存放web应用代码生成和编译文件的临时目录。


tomcat是由很多组件构成,正是所有的组件组合在一起,让tomcat有了各个功能,接下来,讲解tomcat各个组件的作用(由上图我们可以看出tomcat各个组件是一层包着一层,所以接下来我们要像剥洋葱一样一层一层地去解析它)

**一,第一层—server组件 (它在tomcat的最外层,所以可以将一个server实例看成一个tomcat) 简言:**启动一个server实例就相当于启动一个JVM进程,因为tomcat或者说server实例就是基本用Java语言写的;还要注意,每次启动一个server实例,这个实例马上就监听着8005端口(就是一个接收结束server进程消息的窗口)以接收shutdown命令(告诉server实例,可以结束了),这就相当于你高中时中午最后一节课,上课铃刚打,你就盯着黑板上的闹钟,期盼着指针指向下课的地方,当你看到指针快指到下课位置时,你知道,要干饭了!!!!!!好了,别回忆了,知道你高中也这样,嘿嘿,言归正传,这个地方要记住,一个server实例只能对映一个端口,如果你启动了两个实例,一定要保证这两个实例对应的端口不一样

server作用:掌控全局,管理各个部分之间的工作

  1. 全局管理:Server组件是整个Tomcat实例的顶级容器,负责管理和协调所有Service组件(由上面的图我们可以看出server位于tomcat的最外围,包含着service、connector、engine、host等一系列容器)。它提供了服务器级别的配置,包括定义全局服务器配置、管理服务生命周期(tomcat从启动到停止)等。
  2. 监听关闭命令:Server组件会监听某个特定端口(默认是8005),以接收SHUTDOWN命令来关闭Tomcat服务器。当需要关闭服务器时,可以通过向该端口发送SHUTDOWN命令来实现。
  3. 提供监听器机制:Server组件提供了监听器机制,用于在Tomcat整个生命周期中对不同事件进行处理。这些监听器可以执行诸如初始化APR库、初始化Jasper组件、防止JRE内存泄露等任务。

二、第二层—service组件

a作用:Service组件在Tomcat中的主要作用是管理一组关联的Connector和Engine组件。它负责接收和处理客户端请求,以及将这些请求传递给Engine组件进行进一步的处理。简单来说,Service组件是Tomcat中对外提供服务的核心组件。

深入讲解: Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进行处理。

我们再来看看tomcat的工作流程:

看图中的红色文字:这个web服务器就是用来接收请求,但是它不能处理请求,它要将请求转发给下一个部件,这个所谓的下一个部件就是engine这个组件,也就是引擎,这个web服务器就是连接器,而service就是工作在web服务器和engine这个组件连接途径上的,所以说“Service主要用于关联一个引擎和与此引擎相关的连接器”

b,工作流程:

  1. 接收请求:当客户端向Tomcat服务器发送请求时,这些请求首先会被Connector组件(很明显,这个connector组件包含在上图web服务器中)接收。
  2. 封装请求:Connector组件将接收到的请求封装成Request和Response对象。
  3. 传递请求:封装好的Request对象会被传递给Engine组件进行处理。
  4. 处理请求:Engine组件根据请求的Host和Context查找对应的Web应用,并调用相应的Servlet来处理请求。
  5. 生成响应:处理完请求后,Engine组件会生成相应的Response对象,并将其返回给Connector组件。
  6. 发送响应:Connector组件将Response对象发送给客户端,完成整个请求处理流程。

三,第三层—Engine组件(Tomcat中的Engine组件是其核心组件之一,负责处理来自客户端的请求,并将这些请求分发到对应的虚拟主机(Host)或Web应用程序(Context)进行处理。)

a,作用:Engine组件在Tomcat中扮演着全局引擎容器的角色(就是扮演一个引擎的角色),它负责接收来自Connector的请求,并根据请求的URL和虚拟主机名称等信息,将请求分发到对应的Host组件进行处理。Engine组件还负责管理和协调其下的Host组件,确保它们能够高效地处理请求并返回响应。

上面作用的介绍中我们要注意的是“根据请求的URL和虚拟主机名称等信息,将请求分发到对应的Host组件进行处理”,虚拟主机你在前期的学习中就把它当成Host组件,虚拟主机就是host组件,host组件就是虚拟主机,一个engine里面可以有多个host组件(虚拟主机),这些组件的名称也各不相同,在上面我们介绍到engine是用来接收web应用服务器的请求的,这些请求可能会来自不同的IP,也就是来自不同的地方,engine就是将这些来自不同地方的请求转到对应的host组件(虚拟主机)处理,看下图:

上图的localhost标识Host虚拟主机是你这个电脑默认的虚拟主机,其它两个代表你后来又自己配置了两个虚拟主机。

b,工作流程:

  1. 当客户端发送请求时,Tomcat中的Connector组件负责监听指定的端口并接收这些请求。
  2. Connector组件对收到的请求进行协议解析(如HTTP协议解析),将请求转换为Tomcat内部的格式。
  3. 解析后的请求被传递给Engine组件。Engine组件根据请求的主机名等信息,将请求路由到对应的Host组件。
  4. Host组件根据请求的应用上下文路径(即URL中的路径部分),将请求转发到相应的Context组件。
  5. Context组件确定要处理请求的Servlet或其他资源,并调用相应的Servlet实例来处理请求。
  6. Servlet处理完请求后,生成响应结果。响应经过一系列的处理和转换(如编码、压缩等),通过Connector组件发送回客户端。

简而言之,就是客户端发送请求,connector接收后把请求变成tomcat内部各个组件能看懂的信息,然后将其传给Engine,Engine再根据这个信息(请求的样子)将其传给对应的host,host再根据这个信息(请求的样子)将其传给对应的context,context根据信息,让servlet来处理信息,然后servlet将处理的结果传给客户端。这就像把一个皮球踢来踢去!

四,第四层—Host组件

我觉得,目前只用记住第二个作用就行,剩下两个有印象就行。就记住,它是传递信息的就行。

五,第五层—Context组件(它负责管理和维护Web应用程序的运行环境,并提供了一系列重要的功能来支持Web应用的开发和运行

a:关于servlet的介绍—Servlet 充当 Web 服务器和应用程序之间的桥梁,处理来自客户端(如浏览器)的请求并生成响应。再来看下图:

继续说context,你把context当成一个web应用就行

作用:

  1. 管理Servlet实例:Context组件负责管理和维护Servlet实例的生命周期,包括Servlet的装载、初始化、执行和资源回收等。
  2. 提供Web应用环境:Context组件为Web应用提供了运行所需的环境和资源,包括ClassLoader、资源访问对象等。
  3. 处理HTTP请求:当Connector组件接收到HTTP请求后,会通过匹配请求URI的上下文路径来选择相应的Context来处理该请求。然后,Context会根据web.xml文件中定义的servlet映射来选择一个正确的Servlet来处理该请求。

六,第六层 — wrapper组件(扮演着管理Servlet实例的重要角色,Wrapper组件是Tomcat中最底层的容器,它直接包装了java.servlet.Servlet实例。每个Wrapper组件都对应一个特定的Servlet,并负责该Servlet的加载、初始化、执行以及资源回收等生命周期管理。) 功能:

  1. Servlet实例管理
    • Wrapper组件负责创建和管理Servlet实例。当Tomcat启动时或接收到对某个Servlet的请求时,Wrapper组件会负责加载和初始化该Servlet。
    • 在Servlet的生命周期中,Wrapper组件还负责调用Servlet的init()service()destroy()等方法,以确保Servlet能够正确地启动、处理和终止请求。
  2. 请求转发
    • 当Tomcat接收到一个HTTP请求时,Connector组件会解析请求并创建Request和Response对象。然后,这些对象会被传递给Container容器来处理。
    • 在Container容器中,请求会按照Engine、Host、Context和Wrapper的层次结构进行传递。最终,请求会到达与请求URI匹配的Wrapper组件。
    • Wrapper组件会将请求转发给所包装的Servlet实例进行处理,并将处理结果返回给客户端。

下面的,了解下就行

七,第七层— Connector组件 (Tomcat中的Connector组件是其最核心的两个组件之一,主要负责接收客户端连接和客户端请求的处理加工。 **a,基本职责 :**Connector组件的主要职责是监听指定端口上的客户端请求,并将这些请求转发给Tomcat中的其他组件进行处理。同时,它还需要将处理后的响应报文(就是处理后的结果)组装并返回给客户端。可以说,Connector组件是Tomcat与外部客户端进行通信的桥梁。 b,基本组成:

  1. Protocol组件:负责处理具体的通信协议,如HTTP、AJP等。
  2. Mapper组件:用于将请求URI映射到相应的Servlet或资源上。
  3. CoyoteAdapter组件:作为适配器,将请求转发给Tomcat内部的Container容器进行处理。
Connector组件的工作流程:
  1. 监听端口:Connector组件会监听指定端口上的客户端请求。
  2. 解析请求报文:当接收到请求后,Connector组件会解析请求报文,生成Request对象。
  3. 转发请求:Connector组件会将Request对象转发给Mapper组件进行URI映射,然后找到相应的Servlet或资源。
  4. 处理请求:通过CoyoteAdapter组件,请求被转发给Tomcat内部的Container容器进行处理。Container容器会调用相应的Servlet来处理请求,并生成Response对象。
  5. 组装响应报文:Connector组件会读取Response对象,并将其组装成响应报文返回给客户端。

~各位大哥大姐,给个赞,给个收藏呗~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值