Tomcat概述(上)

简介: Tomcat概述(上)

一、Tomcat简介


(1)Tomcat概述


tomcat是由apache软件基金会下属的jakarta项目开发的一个servlet容器,安装SunMicrosystems提供的技术规范,实现了对servlet和javaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能


Tomcat可以解析静态页面也可以解析动态页面 (JSP页面) ,但是解析静态页面的效率没有apache好。可以解析动态页面是因为tomcat是java语言开发的,所以想要使用tomcat必须在服务器上安装JDK环境



20210610102446556.png



(2)Tomcat和Apache的比较


  • 两者的相同点:


  1. 两者都是由Apache组织开发的
  2. 两者都有HTTP服务器的功能
  3. 两者都是开源的


  • 两者的不同点:


  1. Apache是专门用来提供HTTP服务的,以及相关配置的 (如虚拟主机、URL转发等HTTP服务器的基本功能) ,而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器,所以按这个来说Tomcat只是有着HTTP服务的一些功能,并不是一个“专业”的HTTP服务
  2. Apache是一个Web服务器环境程序,启用Apache可以作为Web服务器来使用,不过只可以解析静态页面。如果想要解析动态页面 (JSP页面) 则需要一个解析动态页面的解释器,也就是一个中间件,而Tomcat就可以当这个中间件
  3. Apache侧重于HTTPServer,Tomcat侧重于servlet引擎,如果以Standalone方式运行,功能上与Apache相持平,支持JSP页面,但是对静态页面不太理想
  4. Apache是Web服务器,Tomcat是应用服务器,Tomcat只是一个servlet容器 (JSP也被翻译成servlet) ,可以认为是Apache的扩展,但是也可以独立运行


(3)Tomcat同类产品


  • Resin服务器
  • Jetty服务器
  • JBoss服务器
  • WebSphere服务器
  • Weblogic服务器


在实际环境中,使用最多的一般是Tomcat和Weblogic


扩展:


Weblogic是Orcale公司的产品 (Orcale公司的产品都是收费的) ,可以进一步细分为Weblogic Server、Weblogic Enterprise和Weblogic Portal等系列,其中Weblogic Server的功能特别强大,Weblogic支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单,界面友好,对于那些正在寻找能够提供Java平台所拥有的一切应用服务器的用户来说,Weblogic是一个十分理想的选择


(4)Tocmat和JDK的关系

20210610102523451.png


  • JDK是开发人员开发使用,由java语言编写的,用来给java程序调用的
  • JRE是用来运行Java程序的,也就是Java程序的运行环境
  • JVM是整个Java实现跨平台运行的最核心部分,在运行java程序时,所有的Java程序会首先被编译成,class的类文件,这种类文件可以在虚拟机上执行,也就是说只要运行java的程序都是在JVM上面跑的


JDK包含JRE和JVM,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,这里的bin就是JVM,而lib中则是JVM工作所需要的类库,bin和lib两个文件夹合起来就是JRE。


JVM因为会与平台进行交互,所以使用c/c++和汇编语言编写的


JDK是java运行和编译的前提条件,而tomcat是web项目的运行容器是由java语言开发的,java没有JDK就没有办法进行编译和运行,必须依赖JDK的环境,所以安装Tomcat之前必须先安装JDK环境


(5)Tomcat和JDK版本对应图


20210610102546907.png


二、Tomcat工作原理


(1)Tomcat整体架构

20210610102602724.png

  • Server服务器(Tomcat服务器)包含一个或多个Service服务。
  • 而每个Service服务中又包含了Connector和Container两个核心组件和其他组件。
  • 核心组件Connector包含一个或多个Connector。
  • 核心组件Container包含一个Container。并且可以关联一个或者多个Connector


组件解析:


  • Tomcat的有两个核心组件,相当于“心脏”,分别是Connector和Container
  • 核心组件Connector是可以被替换的,这样会让Tomcat更加灵活
  • 一个Container可以对应多个Connector,多个Connector和一个Container就形成了一个Service,有了Service就可以对外提供服务器,但是Service必须有一个可以生存的环境,而这个环境就是Server。Server可以控制Service的生命周期
  • 在Service中,核心组件Connector主要负责对外交流也就是接受用户的请求,上面说到多个Connector是关联着一个Container的,而多个Connector接受的请求会发送给自己关联的Container,Container会处理这些请求,然后直接返回给Service
  • 那么除了这两个核心组件之外,其他组件有什么用呢,其实两个核心组件提供的就是HTTP服务的基础功能,其他组件就像Apache、Nginx的一些模组一样,说白了Service就像一个箱子,把这些组件装到一起然后对外提供服务


(2)Container组件详解:


20210610102618408.png

Engine:负责处理Connector发过来的所有请求,处理后,会将处理结果直接返回给Service,而Connector是作为Service与Engine的中间媒介出现的。


一个Engine下可以配置一个默认主机和多个虚拟主机(Host),每个虚拟主机都有一个域名,当Engine获得一个请求时,他会把该请求匹配到某个虚拟主机host上,然后把请求交给该虚拟主机来处理。


Engine有一个默认主机,当获得的请求无法匹配到任何虚拟主机时,这个请求最终会交给默认主机 (默认Host) 来处理。


Engine以线程的方式启动Host,也就是说有几个虚拟主机,Tomcat就会产生相应的线程数。


Host:代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。


每个虚拟主机下都可以部署一个或多个Web应用,每个Web应用对应于一个Context,有一个Context path,当Host获得一个请求时,将把该请求匹配到某个Context上


Wrapper:代表一个Servlet容器,他负责管理一个Servlet,包括Servlet的装载、初始化、执行以及资源回收。


Wrapper是最底层的容器,他没有子容器了


(3)Tomcat处理请求过程

20210610102636855.png


客户端发送请求给Tomcat的8080端口,Connector接受请求

Connector接受请求后发送给Container处理请求,Container交给Engine

Engine分配虚拟主机处理请求

虚拟主机分配请求给Context

Context交给Servlet实例处理请求

Servlet处理完后交给Context

Context交给Host

Host交给Engine

Engine直接把处理好的请求交给Service

Service返回请求给客户端


HTTP协议、HTTPS协议、AJP协议和其他协议的请求都是这个处理过程


(4)Tomcat中的连接器


Tomcat中支持两种协议的连接器:HTTP/1.1和AJP/1.3和一个用来关闭Tomcat的连接器


HTTP/1.1协议负责建立HTTP连接,web应用通过浏览器访问Tomcat服务器使用的就是这个连接器,默认监听的端口是TCP8080端口


AJP/1.3协议负载和其他HTTP服务器建立连接,监听的是TCP8009端口,比如Tomcat和apache或者iis(windows的web服务)建立连接时就会用到这个连接器


还有一个TCP8005的监听端口,这个的作用是用来关闭Tomcat的,所以说Tomcat中默认有三个连接器

目录
相关文章
|
SQL 安全 Unix
缓冲区溢出攻击
【8月更文挑战第17天】
607 2
|
存储 人工智能 自然语言处理
Lindorm作为AI搜索基础设施,助力Kimi智能助手升级搜索体验
月之暗面旗下的Kimi智能助手在PC网页、手机APP、小程序等全平台的月度活跃用户已超过3600万。Kimi发布一年多以来不断进化,在搜索场景推出的探索版引入了搜索意图增强、信源分析和链式思考等三大推理能力,可以帮助用户解决更复杂的搜索、调研问题。 Lindorm作为一站式数据平台,覆盖数据处理全链路,集成了离线批处理、在线分析、AI推理、融合检索(正排、倒排、全文、向量......)等多项服务,支持Kimi快速构建AI搜索基础设施,显著提升检索效果,并有效应对业务快速发展带来的数据规模膨胀和成本增长。
|
前端开发 API Docker
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
310 0
|
机器学习/深度学习 算法 数据可视化
Fisher模型在统计学和机器学习领域通常指的是Fisher线性判别分析(Fisher's Linear Discriminant Analysis,简称LDA)
Fisher模型在统计学和机器学习领域通常指的是Fisher线性判别分析(Fisher's Linear Discriminant Analysis,简称LDA)
|
并行计算 Linux TensorFlow
【Deepin 20系统+Tensorflow 2】Linux系统解决Could not load dynamic library ‘libcudart.so.10.0‘
本文描述了在Deepin 20系统中使用TensorFlow 2时遇到GPU未被利用的问题,并给出了相关的调试日志信息。
199 2
|
搜索推荐 测试技术 流计算
承上启下:基于全域漏斗分析的主搜深度统一粗排
文章首先介绍了淘宝搜索的多阶段检索系统,包括召回、粗排和精排阶段。粗排模型的目标是优化商品的排序,以提高在召回集合中选择优质商品的能力。文章提到,粗排模型与精排模型的目标有所不同,粗排更注重腰部商品的排序,而精排更注重头部商品的排序。 此外,文章还探讨了模型的损失函数形式,发现原始的softmax损失函数在处理多正样本时存在问题,提出了改进的损失函数,使得模型在粗排阶段的表现更佳。最后,作者们总结了优化工作的进展,以及优化样本对齐,以实现更好的整体效果。
|
前端开发 Java 数据库连接
Spring Boot常见企业开发场景应用、自动配置原理结构分析(一)
Spring Boot常见企业开发场景应用、自动配置原理结构分析
921 0
|
监控 数据可视化 图形学
重构U3D动画系统:运用Animator Controller层叠状态机优化游戏表现
【7月更文第11天】随着Unity 3D(简称U3D)游戏开发的不断深入,高效且流畅的动画系统成为了提升玩家体验的关键因素。本文将深入探讨如何通过重构U3D项目的动画系统,利用Animator Controller的层叠状态机(Layered State Machine)特性,显著提高动画的处理效率与游戏的流畅度。我们将通过一个实战示例,展示如何设置和优化状态机,进而实现角色动画的细腻控制与高效切换。
506 0
|
Java API Spring
Spring 6 源码编译和高效阅读源码技巧分享
Spring 6 源码编译和高效阅读源码技巧分享
|
NoSQL 关系型数据库 MySQL
Redis协议与异步方式
Redis协议与异步方式
362 0