tomcat原理、结构、设计模式

1 what

一种web服务器,运行java servlet、jsp技术,能为java web提供运行环境并通过http协议处理客户端请求。即tomcat = http服务器+ servlet容器。同类产品有jetty

  • Web应用:Web应用是指通过Web浏览器访问的应用程序,它使用Web技术和标准(如HTTP、HTML、CSS、JavaScript等)来提供用户界面和与用户的交互。Web应用可以包括前端和后端组件,前端负责用户界面和展示,后端负责业务逻辑和数据处理。
  • Servlet:Servlet是Java EE规范的一部分,它是一种运行在服务器端的Java程序,用于接收客户端(如Web浏览器)的请求、处理这些请求(包括访问数据库、调用业务逻辑等),并返回响应给客户端。Servlet是构建动态Web内容的核心技术之一

2 结构

连接器connector+容器container

容器就是engine、host、context、servlet/wrapper

所以架构就是service(8080端口)、connector、engine、host(http:localhost.com)、context(/mvc,一个web应用程序)、servlet/wrapper(/add,一个servlet)

f090bd57045f4088948e1e7da63585ca.png

 

3 关键组件

3.1 connector

3.1.1 Endpoint

用于:网络层通信tcp/ip,如NIO\NIO2

3.1.2 Processor

用于:应用层协议解析,如http

3.1.3 Adapter

用于:统一转换。tomcat request/response 转为servlet request/response,从而传给容器container。

  • servlet request是Java Servlet API 中的一个关键接口。
  • Java Servlet API是Java EE(现称为Jakarta EE)中用于开发服务器端Java应用程序的一套接口和类。Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它主要用于处理客户端的请求并生成响应。

3.2 设计模式

3.2.1 变动点和不变点的设计思路

不变点用抽象类、接口(如ProtocoHanlder、AbstrctProtocol),变点用具体类实现(如Http11NioProtocol、Http11Nio2Protocol)

47fd583736914b5e9911f0e38c739565.png

27e141a1618a4d7b8977cd9fc5a4f24a.png

f646124c6f57416c8648621ea75dbfa3.png

2357e1b0231e4de2b32e8c70f79b00b6.png

6fc9747fa2b14a649d16a3e70e00650d.png

d81414cef6f5481a87660f58599c0e96.png

3.2.2 适配器模式

Adapter,tomcat用CoyoteAdapter。


3.2 container

3.2.1 如何管理engine、host、context、servlet,用组合模式,让他们都实现Container

  • 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。在这种模式中,客户端对单个对象和复合对象的使用具有一致性,即客户端能够以相同的方式处理单个对象和它们的组合。

说白了就是,用一个类/接口组装成树结构(有父子关系),这就是组合了,然后因为都是实现同一个接口,所以对每个部分的调用都是一样的。如下图

d785e0ea64ad4fb6952f9460fcbef154.png

3.2.2 engine、host、context、servlet是顺序调用,用的是责任链模式Pipeline-Valve

pipeline是责任链,是队列,队列中的元素是valve。valve能执行处理逻辑,并转给下一个value。

valve和filter的区别:valve是tomcat的,filter是java servlet api的。valve工作再web容器级别,拦截所有应用请求,filter工作在应用级别,拦截某个web应用请求

08b1200a4585496e98a08c964952573a.png

3635bb9b0a7c46a1997621631c00212c.png

acb7a18568bd41c1b4ded295aeee2060.png

d28296d8ebba41d5acc6c209df8c0538.png

3.2.3 engine管生命周期和分配请求

分配请求:映射mapper组件。根据url一层层找到对应的wrapper。

生命周期:负责容器创建、初始化、启动、销毁等。每个Container都继承了LifeCycle。所以也是个组合模式。

还用到了观察者模式(监听变更生命周期状态)、

组合模式(树结构即有父子关系)、

模板设计模式(写通用模板(通用逻辑),模板里面调用新方法,新方法走具体实现)

 

4 架构设计

  1. 罗列需求
  2. 面向对象设计类
  3. 找出需求中的变动点和不变点
  4. 变动点用抽象类,不变点用具体类实现

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平台稳定性里程碑 | Android 15 Beta 3 已发布

作者 / 产品管理副总裁、Android 开发者 Matthew McCullough 从近期发布的 Beta 3 开始,Android 15 达成了平台稳定性里程碑版本,这意味着开发者 API 和所有面向应用的行为都已是最终版本,您可以查阅它们并将其集成到您的应用中,并…

HTML 标签列表(功能排序)

HTML 标签列表(功能排序) HTML(超文本标记语言)是构建网页的标准语言,它定义了网页的结构和内容。HTML包含众多标签,每个标签都有其特定的功能和用途。本文将按照功能对HTML标签进行分类和排序,以帮助您更好地理解和使用这些标签。 基础结构标签 <!DOCTYPE html>…

使用Node.js 框架( Express.js)来创建一个简单的 API 端点

文章目录 使用Node.js 框架&#xff08; Express.js&#xff09;来创建一个简单的 API 端点什么是express安装修改代码 express 自动刷新 使用Node.js 框架&#xff08; Express.js&#xff09;来创建一个简单的 API 端点 什么是express Express 是一个保持最小规模的灵活的 …

系统架构设计师——计算机体系结构

分值占比3-4分 计算机硬件组成 计算机硬件组成主要包括主机、存储器和输入/输出设备。 主机&#xff1a;主机是计算机的核心部分&#xff0c;包括运算器、控制器、主存等组件。运算器负责执行算术和逻辑运算&#xff1b;控制器负责协调和控制计算机的各个部件&#xff1b;主存…

如何看自己电脑的ip地址?这些方法教你搞定

在数字化时代&#xff0c;网络已经成为我们生活中不可或缺的一部分。对于每一个接入网络的设备来说&#xff0c;IP地址就像是一个独特的身份证&#xff0c;它标识着设备在网络中的位置。对于电脑用户而言&#xff0c;了解如何查看自己电脑的IP地址&#xff0c;不仅有助于我们更…

Linux设备驱动器 之一 工作(worker)线程

Linux设备驱动器之一 工作线程 数据结构Linux APIs产生工作线程 kthread_create_worker初始化工作 kthread_init_work排队工作 kthread_queue_work 在Linux中的应用实列SPI 驱动器与imx SPI任务工作线程代码启动任务工作线程 工作线程&#xff08;worker&#xff09;Linux管理线…

14-44 剑和诗人18 - 你想怎么应用 RAG 与微调

​​​​​​ 要充分发挥 LLM 的潜力&#xff0c;需要在检索增强生成 (RAG) 和微调之间选择正确的技术。 让我们研究一下何时针对 LLM、较小模型和预训练模型使用 RAG 而不是微调。我们将介绍&#xff1a; LLM 和 RAG 的简要背景RAG 相对于微调 LLM 的优势何时针对不同模型大…

AI集成工具平台一站式体验,零门槛使用国内外主流大模型

目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚&#xff0c;正推动着千行百业的数智化进程。随着技术演进&#xff0c;2024年被视为是大…

linux修改内核实现禁止被ping

概述 Linux默认允许被ping。其主要决定因素为&#xff1a; 内核参数防火墙&#xff08;iptables/firewall&#xff09; 以上的决定因素是与的关系&#xff0c;即需要均满足。 因此&#xff0c;修改linux禁被ping有以上两种方法可以实现。 修改内核文件使禁ping 1. 临时生…

服务预约自动化:智能机器人引领预约新潮流

在数字化时代&#xff0c;服务预约的需求日益增长&#xff0c;智能机器人以其自动化和智能化的特性&#xff0c;正在重塑服务预约的流程。 一、服务预约的现代挑战 服务预约流程面临的挑战包括用户操作复杂、等待时间长、个性化服务难以满足等。 二、智能机器人的优势 智能…

Perl 语言入门:编写并执行你的第一个脚本

摘要 Perl 是一种高级、通用的、解释型、动态编程语言&#xff0c;以其强大的文本处理能力而闻名。本文将指导初学者如何编写和执行他们的第一个 Perl 脚本&#xff0c;包括 Perl 的基本概念、脚本的基本结构、运行 Perl 脚本的方法以及一些简单的 Perl 语法。 引言 Perl&am…

保健品商城小程序模板源码

保健品商城小程序模板源码 简洁通用的保健品&#xff0c;健康生活&#xff0c;零售商品&#xff0c;电子商务微信小程序前端模板下载。包含&#xff1a;主页、购物车、客服、个人中心、我的订单、商品详情、我的钱包、设置等等。 保健品商城小程序模板源码

定制化模型炼金术:Mojo模型与自定义训练循环的动态融合

定制化模型炼金术&#xff1a;Mojo模型与自定义训练循环的动态融合 在机器学习领域&#xff0c;模型训练循环是构建智能系统的核心过程。Mojo模型&#xff0c;作为H2O.ai提供的一种模型部署格式&#xff0c;主要用于模型的序列化和预测。虽然Mojo模型本身不支持自定义训练循环…

web安全基础名词概念

本节内容根据小迪安全讲解制作 第一天 域名&#xff1a; 1.1什么是域名&#xff1f; 网域名称(英语&#xff1a;Domain Name&#xff0c;简称&#xff1a;Domain)&#xff0c;简称域名、网域&#xff0c;是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称&a…

celery执行任务报错ValueError: not enough values to unpack

背景 在做用户注册模块的时候需要对手机号验证的过程进行优化&#xff0c;目前想到的方式是通过celeryrabbitmq的方式进行异步处理&#xff0c;选择使用celery是因为使用方便、性能好、可分布式部署。 环境信息 目前使用地win11容器化启动 rabbitmq:3.13.2 python:3.6.8 cel…

OEACLE怎么实现AES加密解密

在Oracle数据库中实现AES加密解密&#xff0c;通常会使用Oracle提供的DBMS_CRYPTO包。DBMS_CRYPTO是一个强大的PL/SQL包&#xff0c;用于加密和解密数据&#xff0c;支持多种加密算法&#xff0c;包括AES。以下是实现AES加密解密的具体步骤和示例&#xff1a; 一、确保权限 首…

高薪程序员必修课-JVM创建对象时如何解决多线程内存抢占问题

前言 在JVM中&#xff0c;堆的内存分配过程涉及到线程安全性的保障&#xff0c;具体来说涉及到对象的内存分配时&#xff0c;并不是简单的抢占式分配&#xff0c;而是通过一些机制来保证线程安全和高效的内存管理。下面解释一下JVM是如何设计来保证线程安全的&#xff1a; 内存…

Oracle怎么实现RSA加密解密

Oracle数据库实现RSA加密解密通常需要通过Java编写的存储过程来完成&#xff0c;因为Oracle自身并不直接支持RSA加密的原生函数。以下是实现RSA加密解密的大致步骤和考虑因素&#xff1a; 一、准备Java类 编写Java类&#xff1a; 创建一个Java类&#xff08;如RSACrypto&…

STA:延迟为什么会有负值?

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 相关文章链接&#xff1a; STA&#xff1a;串扰延迟分析 STA&#xff1a;CRPR悲观路径移除 这个问题就是典型的SI问题&#xff0c;受SI影响&#xff0c;与hold 分析而言data…

AI Native 入门案例教程

环境准备 1. 安装 AI Native 首先&#xff0c;需要安装 AI Native。可以通过 pip 安装&#xff1a; pip install ainative2. 安装 TensorFlow AI Native 是基于 TensorFlow 的&#xff0c;因此需要安装 TensorFlow。可以通过 pip 安装&#xff1a; pip install tensorflow…