01Tomcat工作原理

1、服务器分类

1.1、JavaEE 更名

JavaEE,很多人都知道它是社区驱动的企业软件标准。JavaEE 是利用Java Community Process 开发的,每个版本都集成了符合业界需求的新特性,提供了一个丰富的企业软件平台,提高了应用可移植性,提高了开发人员的工作效率。
2018-03-05 日,据国外媒体报道,开源组织Eclipse 基金会宣布将JavaEE(Enterprise Edition)被更名为JakartaEE(雅加达)。这是Oracle 将Java 移交给开源组织Eclipse 后实现对Java品牌控制的最新举措。

1.2、应用服务器( JavaEE Application Server )

应用服务器是Java EE 规范的具体实现, 可以执行/驱动基于JavaEE 平台开发的web 项目。绝大部分的应用服务器都是付费产品。常见的应用服务器有:

Weblogic(BEA)
WebLogic 是BEA 公司的产品。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供JavaEE 平台所拥有的一切应用服务器的用户来说,WebLogic 是一个十分理想的选择。

Webshpere(IBM)
WebSphere 是IBM 公司的产品,WebSphere Application Server 是基于JavaEE 的应用环境,可以运行多种操作系统平台,用于建立、部署和管理JavaEE 应用程序。

JBoss(RedHad)
JBoss 是一个种遵从JavaEE 规范的、开放源代码的、纯Java 的EJB 服务器,对于JavaEE有很好的支持。

Geronimo(Apache)
Geronimo 是Apache 软件基金会的开放源码J2EE 服务器,是一个符合J2EE 标准的应用服务器。

1.3、Web 容器( Web Server )

只实现了JavaEE 平台下部分技术标准,如Servlet,Jsp,JNDI,JavaMail。Web 容器是开源免费的。

Tomcat(Apache 开源免费)
Tomcat 是Apache 软件基金会的一款完全开源免费的Servlet 容器,它是全世界最著名的基于Java 语言的轻量级应用服务器,它支持HTML、JS 等静态资源的处理,因此又可以作为轻量级Web 容器使用。

Jetty(Jetty 开源免费)
Jetty 是挂在eclipse 基金会下,基于Java 语言编写的实现Servlet 规范的Web 容器。

2、TCP 协议

TCP 是一个可靠的传输协议,在创建连接时会经历三次握手,在断开连接时会经历四次
挥手。

2.1、建立连接的三次握手

所谓三次握手是指建立一个TCP 连接时需要客户端和服务器端总共发送三个包以确认
连接的建立。

A 和B 打电话:
A 对B 说:你好,我是A,你能听到我说话吗?
B 对A 说:嗯,我能听到你说话。
A 对B 说:好,那我们开始聊天吧。

2.2、断开连接的四次挥手

四次挥手即终止TCP 连接,就是指断开一个TCP 连接时,需要客户端和服务端总共发送
4 个包以确认连接的断开。

A 和B 打电话:
A 对B 说:我说完了,我要挂电话了
B 对A 说:等一下,我还没说完
B 继续对A 说:我说完了,你可以挂电话了
A 对B 说:好,我挂电话了

3、Http 协议

3.1、Http 协议简介

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。
HTTP 是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP 请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML 文件和图像。我们称这个应答服务器为源服务器(origin server)。
通常,由HTTP 客户端发起一个请求,创建一个到服务器指定端口(默认是80 端口)的TCP 连接。HTTP 服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

3.2、Http 协议特点

 单向性
 无状态

3.3、Http 工作原理

HTTP 请求/响应的步骤:
1)客户端连接到Web 服务器
一个HTTP 客户端,通常是浏览器,与Web 服务器的HTTP 端口(默认为80)建立一个TCP 套接字连接。例如:http://www.baidu.com。
2)发送HTTP 请求
通过TCP 套接字,客户端向Web 服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4 部分组成。
3)服务器接受请求并返回HTTP 响应
Web 服务器解析请求,定位请求资源。服务器将资源复本写到TCP 套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4 部分组成。
4)释放连接TCP 连接
若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
5)客户端浏览器解析HTML 内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML 文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML 的语法对其进行格式化,并在浏览器窗口中显示。

  • 在浏览器地址栏键入URL,按下回车之后会经历以下流程:
    1、浏览器向DNS 服务器请求解析该URL 中的域名所对应的IP 地址;
    2、解析出IP 地址后,根据该IP 地址和默认端口80,和服务器建立TCP 连接;
    3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
    4、服务器对浏览器请求作出响应,并把对应的 html/json/… 文本等发送给浏览器;
    5、根据状态选择是否释放TCP 连接;
    6、浏览器将该html 文本解析并显示内容;

4 Tomcat 架构介绍

在架构图中包含了Tomcat 内部的主要组件,每个组件之间的层次包含关系很清楚。
Tomcat 大体上可以看成由Connector 和Container 组件组成。Connector 组件负责在服务器端处理客户端连接(客户端连接、接收客户端消息报文、消息报文的解析等),Container负责对客户端的请求进行逻辑处理,并把结果返回给客户端。
对应server.xml

<Server>
	<Listener/>
	<GlobalNamingResources>
		<Resource/>
	</GlobalNamingResources>
	<Service>
		<Executor/>
		<Connector/>
		<Engine>
			<Cluster/>
			<Realm/>
			<Host>
				<Context/>
			</Host>
		</Engine>
	</Service>
</Server>

5、Tomcat 组件介绍

5.1、Server 组件

Server 是最顶级的组件,代表Tomcat 的运行实例,一个JVM 中只会有一个Server。

5.2、Listener 组件

在Tomcat 生命周期中完成不同的工作。

5.3、GlobalNamingResources 组件

集成JNDI。

5.4、Service 组件

指的是一个服务,主要的功能是把connector 组件和engine 组织起来,使得通过
connector 组件与整个容器通讯的应用可以使用engine 提供的服务。

5.5、Connector 组件

连接器组件,可以配置多个连接器支持多种协议,如http,APJ 等。

5.6、Engine 组件

服务引擎,这个可以理解为一个真正的服务器,内部提供了多个虚拟主机对外服务。

5.7、Host 组件

虚拟主机,每一个虚拟主机相当于一台服务器,并且内部可以部署多个应用,每个虚拟
主机可以绑定一个域名,并指定多个别名。

5.8、Context 组件

应用上下文,每一个webapp 都有一个单独的context,也可以理解为每一个context 代
表一个webapp。

5.9、Valva 组件

Access Log Valve 用来创建日志文件,格式与标准的web server 日志文件相同。可以使用
用日志分析工具对日志进行分析,跟踪页面点击次数、用户会话的活动等。

6、Tomcat 处理请求过程

  1. 用户访问 http://localhost:8080/test/index.jsp,请求被发送到Tomcat,被监听8080 端口并处理HTTP/1.1 协议的Connector 获得。
  2. Connector 把该请求交给它所在的Service 的Engine 来处理,并等待Engine 的回应。
  3. Engine 获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host。
  4. Engine 匹配到名为localhost 的Host 虚拟主机来处理/test/index.jsp 请求(即使匹配不到会请求交给默认Host 处理),Host 会根据/test 匹配它所拥有的所有的Context。
  5. 匹配到的Context 获得请求/index.jsp。
  6. 构造HttpServletRequest 对象和HttpServletResponse 对象,作为参数调用 JspServletdoGet()doPost() 执行业务逻辑、数据存储等程序。
  7. Context 把执行完之后的结果通过HttpServletResponse 对象将响应内容返回给Host。
  8. Host 将响应内容返回给Engine。
  9. Engine 将响应内容返回Connector。
  10. Connector 将响应内容返回给客户Browser。

7、Tomcat启动流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值