Tomcat的实现

在一台电脑上启动tomcat,tomcat是server,即服务器。服务器只会被实例化一次,tomcat这只猫就是服务器。服务器下包含多个子节点服务,即service,顾名思义就是对外提供服务。服务器通常只有一个服务,默认是卡特琳娜Catalina。

核心配置文件是server.xml

server

根节点就是Server,即tomcat猫🐱,只会被实例化一次,下面可以有多个service,但通常只有一个,默认为卡特琳娜Catalina.

service

Service组件的作用就是对外提供服务。

一个service有一个引擎,和按协议划分多个连接器connector,比如负责http协议(80端口)的连接器、负责https(443端口)的连接器、负责其他协议的连接器等等.....

连接器connector

连接器负责通信;引擎复杂请求的处理。

不同的连接器负责监听不同的网络端口(可配置端口),处理请求,比如http协议默认的80端口。一个连接器即是一个线程,线程一直在循环运行,接收所有先后到来的网络请求,并将每一个请求都按对应的协议转换为不同的request对象,随后将其作为参数使用引擎对象进行调用。

host

引擎是一个容器,其中包含一个或多个host对象,也即虚拟主机。host的存在保证了单个tomcat实例支持多个域名或主机名,使得一台tomcat可以去处理多种请求。【根据不同的目标地址来区分不同的请求

切记:host配置的是域名或主机名,一条URL中后面的请求方式等信息是取决于下面的context组件

context

为了实现一个虚拟主机下托管多个不同的web应用程序(Context)每个 <Context> 组件代表一个特定的Web应用程序上下文,存放着该Web应用程序的配置信息。

通过配置不同的 <Context>,管理员可以为每个Web应用程序定制独特的设置,确保它们在同一个虚拟主机下能够独立运行且相互隔离。

因为request对象包含完整的URL等信息,所以引擎能够解析到对应的虚拟主机host上(域名),进而在虚拟主机上找到对应的应用,最终找到应用下对应的servlet(通常就是我们写的业务代码)对请求进行处理。

wrapper

一个Context应用包含一个或多个servlet实例,同一个servlet的所有实例被Wrapper容器进行统一管理

host、Context、Wrapper都是容器。

连接器给出的request请求对象中包含了他要访问的servlet的详细路径,因此给到容器中,都能通过路径准确的传递给下一个容器(主机名:应用名/servlet名)

当我们编写的servlet完成(业务逻辑)之后,连接器将从引擎对象的方法调用获得一个返回值response对象,最后再将respondse对象转化为字节流返回给浏览器。

至此,一个请求的完整过程就结束了。这就是tomcat服务器的架构和原理。

相关推荐

  1. tomcat实现

    2024-05-09 19:00:04       13 阅读
  2. Tomcat实例配置与应用深入讲解

    2024-05-09 19:00:04       30 阅读
  3. 从零手写实现 tomcat-03-基本 socket 实现

    2024-05-09 19:00:04       13 阅读
  4. Tomcat服务实例部署

    2024-05-09 19:00:04       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-09 19:00:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-09 19:00:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-09 19:00:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-09 19:00:04       20 阅读

热门阅读

  1. 从零手写实现 tomcat-03-基本的 socket 实现

    2024-05-09 19:00:04       13 阅读
  2. 【论文创新】如何寻找自己论文的创新点?

    2024-05-09 19:00:04       9 阅读
  3. 以下是服务器的一些主要作用:

    2024-05-09 19:00:04       9 阅读
  4. Vue Router

    2024-05-09 19:00:04       10 阅读
  5. Flink面试整理-Flink是什么?

    2024-05-09 19:00:04       11 阅读
  6. 封装长按触发事件的uniapp组件

    2024-05-09 19:00:04       10 阅读
  7. Flask 路由基础和封装

    2024-05-09 19:00:04       9 阅读