首页 > 其他分享 >一、Tomcat基础知识与运行原理

一、Tomcat基础知识与运行原理

时间:2024-08-14 14:08:29浏览次数:8  
标签:容器 HTTP 请求 Tomcat 基础知识 服务器 原理 servlet

本章节为介绍如何安装Tomcat工具以及其主要架构知识概念,深入浅出让新人玩家理解为什么选择该容器以及该容器的优点

web服务器

概念
服务器:安装了服务器软件的计算机
服务器软件:接收用户的请求,处理请求,做出响应
web服务器软件:接收用户的请求,处理请求,做出响应。
在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目

常见web服务器软件
1、webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费。
2、websphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费。
3、JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费。
4、Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源、免费。

Tomcat

一、Tomcat 安装

下载
https://tomcat.apache.org/download-80.cgi
apache-tomcat-8.5.42-windows-x64.zip
安装
将下载的.zip 压缩包解压到系统的目录(建议是没有中文不带空格的目录)下即可。

目录结构如图:

二、Tomcat源码

下载
地址:https://tomcat.apache.org/download-80.cgi
apache-tomcat-8.5.42-src.zip
运行
1)解压zip压缩包
2)进入解压目录,并创建一个目录,命名为home ,并将conf、webapps日录移入home目录中
3)在当前目录下创建一个pom.xml文件,引入tomcat的依赖包

HTTP服务器的请求处理原理

servlet容器的工作流程

HTTP服务器不直接调用servlet,而是把请求交给servlet容器来处理
问:那servlet容器是怎么工作的?
当客户请求某个资源时,HTTP服务器会用一个servletRequest对象把客户的请求信息封装起来,然后调用servlet容器的service方法,
servlet容器金到请求后,根据请求的URI和servlet的映射关系,找到相应的servlet,如果servlet还没有被加载,就用反射机制创建这个servlet,
并调用servlet的init方法来完成初始化,接着调用servlet的service方法来处理请求,把servletResponse对象返回给HTTP服务器,HTTP服务器会把响应发送给客户端。

三、Tomcat整体架构

我们知道如果要设计一个系统,首先是要了解需求,而我们已经了解了Tomcat要实现两个核心功能:
1)处理socket连接,负责网络字节流与Request和Response对象的转化。
2)加载和管理servlet,以及具体处理Reguest请求。
因此romcat设计了两个核心组件连接器(connector)和容器(container)来分别做这两件事情,连接器负责对外交流,容器负责内部处理。

连接器coyote

Coyote 是Tomcat的连接器框架的名称,是Tomcat服务器提供的供客户端访问的外部接口。
客户端通过coyote与服务器建立连接、发送请求并接受响应。
Covote 封装了底层的网络通信(socket 请求及响应处理),为catalina 容器提供了统一的接口,使catalina容器与具体的请求协议及I0操作方式完全解耦。
coyote 将socket 输入转换封装为 Request 对象,交由catalina 容器进行处理,处理请求完成后,Catalina 通过coyote 提供的Response 对象将结果写入输出流
Coyote 作为独立的模块,只负责具体协议和I0 的相关操作,与servlet 规范实现没有直接关系,因此即便是 Request 和Response 对象也并未实现servlet规范对应的接口,
而是在catalina 中将他们进一步封装为servletRequest 和ServletResponse。

Io模型与协议
在coyote中
Tomcat支持的多种I/o模型和应用层协议,具体包含的IO模型和应用层协议,看下表
Tomcat 支持的Io模型(自8.5/9.0 版本起,Tomcat 移除了 对 BI0 的支持):

IO模型 描述
NIO 非阻塞I/0,采用Java NIo类库实现。
NIO2 异步I/0,采用JDK 7最新的NIO2类库实现。
APR 采用apache可移植运行库实现,是c/c++编写的本地库。如果选择该方案,需要单独安装APR库

Tomcat 支持的应用层协议:

应用层协议 描述
HTTP/1.1 这是大部分web应用采用的访问协议。
AJP 用于和web服务器集成(如apache),以实现对静态资源的优化以及集群部署,当前支持AJP/1.3。
HTTP/2 HTTP 2.0大幅度的提升了web性能。下一代HTTP协议,自8.5以及9.0版本之后支持。


连接器组件

连接器的组件对数据处理的流程简介
客户端发起的socket请求会被EndPoint接收并且会把请求发送给处理器processor,processor在接受到请求之后将该请求转换成http协议的请求,
并将http的请求进行解析封装成request对象,但是容器需要的是servletRequest对象,所以Tomcat用到了设计模式-适配器设计模式,先调用adapter(适配器)的转换方法将Request对象转换成servletRequest对象再传输给容器。
连接器中的各个组件的作用
EndPoint
1、EndPoint:coyote 通信端点,即通信监听的接口,是具体socket接收和发送处理器,是对传输层的抽象,因此Endpoint用来实现TCP/P协议的。
2、Tomcat 并没有Endpoint接口,而是提供了一个抽象类abstractEndpoint,里面定义了两个内部类:acceptor和Socketprocessor。
Acceptor用于监听socket连接请求。socketprocessor用于处理接收到的socket请求,它实现Runnable接口,在Run方法里调用协议处理组件processor进行处理,为了提高处理能力,
socketprocessor被提交到线程池来执行。而这个线程池叫作执行器(Executor),(后面再详细介绍Tomcat如何扩展原生的Java线程池)

Processor
Processor:Coyote协议处理接口如果说Endpoint是用来实现TCP/IP协议的,那么Processor用来实现HTTP协议,Processor接收来自Endpoint的socket,
读取字节流解析成Tomcat Recuest和Response对象,并通过Adapter将其提交到容器处理,processor是对应用层协议的抽象。

ProtocolHandler
ProtocolHandler:Coyote协议接口,通过Endpoint和Processor ,实现针对具体协议的处理能力。Tomcat按照协议和I/O 提供了6个实现类:
AjpNio2Protocol、AjpAprProtocol、Http11Nio2Protocol、AjpNio2Protoco1,Http11NioProtoco1、Http11Aprprotocol,在配置tomcat/conf/server.xml 时,至少要指定具体的ProtocolHandler,当然也可以指定协议名称,如:HTTP/1.1,如果安装了APR,那么将使用nttp11Aprprotocol ,否则使用 Http11Nioprotocol

Adapter
由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat定义了自己的Request类来”存放”这些请求信息。Protoco1Hand1er接口负责解析请求并生成Tomcat Reguest类。但是这个Reguest对象不是标准的servletReguest,也就意味着,不能用omcat Request作为参数来调用容器。Tomcat设计者的解决方案是引入coyoteAdapter,这是适配器模式的经典运用,连接器调用covoteAdapter的Sevice方法,传入的是Tomcat Request对象,CoyoteAdapter负责将Tomcat Reguest转成servletRequest,再调用容器的service方法。

标签:容器,HTTP,请求,Tomcat,基础知识,服务器,原理,servlet
From: https://www.cnblogs.com/Edehuag/p/18356328

相关文章

  • 白话双向套利原理
    在A,B两个交易所开立账户,一个执行买入,另一个执行卖出,就好比从便宜的地方进货,到贵的地方卖出,朴素的生意原理。 具体流程上,分为监听、判定、交易、提现、结算这几个步骤。1、监听到某一时刻,判定价差出现套利机会A所:1BTC价格10000USD20000USDTB所:1BTC 9000USD20000USDT ......
  • 科普文:Java基础系列之【java框架基础:字节码增强技术框架ASM#ClassReader实现原理及源
    1概述ASM是Java中比较流行的用来读写字节码的类库,用来基于字节码层面对代码进行分析和转换。在读写的过程中可以加入自定义的逻辑以增强或修改原来已编译好的字节码,比如CGLIB用它来实现动态代理。ASM被设计用于在运行时对Java类进行生成和转换,当然也包括离线处理。ASM短小精......
  • Session的工作原理、Session与Token的区别
    Session是一种在无状态的HTTP协议中用来实现用户状态管理的机制。它通过在服务器端保存用户的状态信息,并通过客户端在每次请求时传递一个唯一的标识符(通常称为SessionID),实现了在多个请求之间维持用户的会话状态。一、Session的工作原理:客户端发送请求:用户首次访问网站......
  • [天线原理及设计>基本原理] 2. 细线天线上的电流分配
    2.细线天线上的电流分配为了说明线性偶极子上电流分布的产生及其随后的辐射,让我们首先从无损双线传输线的几何形状开始,如图1.15(a)所示。电荷的运动沿每条导线产生幅度为I0/2的行波电流。当电流到达每根电线的末端时,它会经历完全反射(幅度相等,相位反转180°)。当反射行波与入射行......
  • 面试官:说说volatile应用和实现原理?
    volatile是并发编程中的重要关键字,它的名气甚至是可以与synchronized、ReentrantLock等齐名,也是属于并发编程五杰之一。需要注意的是volatile并不能保证原子性,因此使用volatile并没有办法保证线程安全。并发编程五杰:PS:“并发编程五杰”是我个人起的名字,大家也不用太......
  • [天线原理及设计>基本原理] 1 辐射机制
    1.辐射机制1.1.SingleWire单线如果电荷不移动,则不会产生电流,也不会产生辐射。如果电荷以匀速移动:a.如果电线是直的,并且范围是无限的,则没有辐射。b.如果电线弯曲、弯曲、不连续、端接或截断,则会产生辐射,如图1.10所示。如果电荷在时间运动中振荡,即使线是直的,它也......
  • 多态的机制原理
    多态的机制原理本质上多态分两种1、编译时多态(又称静态多态)2、运行时多态(又称动态多态)多态通常有两种实现方法1、子类继承父类(extends)2、类实现接口(implements)要使用多态,在声明对象时就应该遵循一条法则:声明的总是父类类型或接口类型,创建的是实际类型。例来说,假设我们......
  • React 框架原理的八点
    React框架原理深入剖析React是一个用于构建用户界面的JavaScript库,它以其高效的渲染机制、组件化的开发模式和创新的设计理念在前端开发领域占据了重要地位。一、虚拟DOM(VirtualDOM)虚拟DOM是React性能优化的核心策略之一。在传统的Web开发中,每当数据发生变化......
  • Transformer--概念、作用、原理、优缺点以及简单的示例代码
    Transformer的概念Transformer是一种基于自注意力机制的神经网络模型,最早由Vaswani等人在2017年的论文《AttentionisAllYouNeed》中提出。它主要用于自然语言处理任务,如机器翻译、文本生成、文本分类等。与传统的循环神经网络(RNN)和长短时记忆网络(LSTM)不同,Transformer完全......
  • KEEPALIVED高可用集群原理及实例
    一.高可用集群1.1Keepalived介绍Keepalived是一个用C语言编写的轻量级的高可用解决方案软件。主要功能包括:1.实现服务器的高可用性(HighAvailability):通过虚拟路由冗余协议(VRRP)来实现主备服务器之间的故障切换,当主服务器出现故障时,备份服务器能够自动接管服务,保证业务的......