tomcat(一)

简介: tomcat

一、 tomcat



1.1tomcat 理论

Apache Tomcat软件是Java规范的开源实现。这些规范是雅加达EE平台的一部分。


Jakarta EE平台是Java EE平台的演变。Tomcat 10及更高版本的实现作为Jakarta EE的一部分开发的规范。Tomcat 9 和更早版本的实现规范是作为 Java EE 的一部分开发的。

Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。


1.2 tomcat的内部的三个重要容器

(1)Web 容器:完成 Web 服务器的功能。

(2)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。

(3)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。



因此 Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送


给 Servlet,并将 Servlet 的响应传送回给客户。


1.2.1 servlet容器

Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的


特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。


1.2.2 JSP容器

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。

JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。

JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。


1.3 tomcat的核心

通常意义上的 web 服务器接受请求后,只是单纯地响应静态资源,如HTMI文件,图片文件等,不能在后端进行一定的处理操作。Tomcat是 Apache 下的一个子项目,它具备 web服务器的所有功能(WEB容器嵌入Servlet-》动态请求),不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范的Java代码servlet,同时将执行的结果以HTML代码的形式写回客户端。


Tomcat由一系列的组件构成,其中核心的组件有三个:


1.3.1 web容器

作用:完成web服务器的功能HTTP HTTPS请求的接受和响应。


接受、响应请求

展示动态页面

入口 出口


1.3.2 JSP容器

作用:用于将JSP动态网页翻译成servlet 代码 index.html index.php index. jspo


JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。 JSP通过网页表单获取用户输入数据、访问数据库及其他数

据源,然后动态地创建网页。


index.html --》 nginx可以直接展示index.php


index.jsp --> java环境—》和数据库怎么进行交互,怎么连接到后端???


index.jsp—》java类代码—》就是执行对接后端的执行代码,所以我们需要在进行与用户交互时,将用户发出的请求、数据、传输到后端

但是index.jsp中的一些java代码无法直接执行对接或者调用,需要先翻译


1.3.3 servlet容器

作用:servlet代码格式就是用JSP容器来处理,由名称为 catalina的脚本来处理Servlet 代码(具体的一个任务,从数据库中拿取数据给与前端)。


小结:

web容器:1、接受、响应请求 2 、 展示动态页面

JSP容器:翻译java—>servlet

Serverlet容器:借助于catalina来执行servelet代码(动态任务执行的标准格式)


1.4 Tomcat功能组件结构

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容


器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。


Connector: 负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。


Container: 负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用Servlet 相关逻辑。


Service: 对外提供的 Web 服务。主要包含 Connector 和 Container

两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。


1.5 container 结构分析

每个 Service 会包含一个 Container 容器,在 Container 内部包含了 4 个子容器。


1.5.1 四个子容器

(1)Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;

(2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;

(3)Context:代表一个 Web 应用,包含多个 Servlet 封装器;

(4)Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。


Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。

容器由一个引擎可以管理多个虚拟主机。

每个虚拟主机可以管理多个 Web 应用。

每个 Web 应用会有多个 Servlet 封装器。


1.6 tomcat请求过程

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;

2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;

3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet

中执行对应的业务逻辑、数据存储等。

4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过Connector 返回给客户端。


详解:


假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp


请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应

Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host

Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)

localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context

Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为"“的Context去处理)

path=”/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet

Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类

构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法

10)Context把执行完了之后的HttpServletResponse对象返回给Host

11)Host把HttpServletResponse对象返回给Engine

12)Engine把HttpServletResponse对象返回给Connector

13)Connector把HttpServletResponse对象返回给客户browser


1.7 tomcat 核心和功能组件作用

Tomcat核心组件有6个,分别为Tomcat有Server、Service、Connector、Engine、Host和Context等


1、Server

Server元素在最顶层,代表整个Tomcat容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。

Server的主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。


2、Service

Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。Tomcat可以提供多个Service,不同的Service监听不同的端口。


3、Connector

Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。通过配置Connector,可以控制请求Service的协议及端口号。


4、Engine

Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。

实际上,Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。


5、Host

Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。

Host虚拟主机的作用,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。


6、Context

Context元素代表在特定虚拟主机上运行的一个Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。Context是Host的子容器,每个Host中可以定义任意多的Context元素。


二、Tomcat数据流向


2.1 tomcat 数据流向


用户请求(访问80端口)——》发送请求发送给tomcat——》tomcat有一个端口在监听8080端口)从8080端口进入流量的会被在此端口的线程监听到

给与我们的web容器进行处理(有index.html页面显示出来 从8080端口来时会有交互界面 会读取到index.jsp这种java代码)但是java代码无法直接使用——》需要利用到jsp容器将index.jsp中的java的servlet代码进行翻译

servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码并不是直接对接mysql数据库而是直接对接用户的请求例如app中的某个功能模块比方说看个人信息 servlet容器与app接是api进行对接(具体的URL)

数据流向最终会通过用户请求内容 去mysql数据库寻找相应的内容最后返回给用户


2.2 nginx --> tomcat数据流向


1、 客户通过80端口访问到达nginx,再从80端口访问8080端口到达tomcat

2、 8080端口可以监听到客户发送的信息,然后通过Connector发送连接请求连接数据给Engine处理

3、 Engine接收到请求后,交给host处理

4、 Host会请求路径,让context去找访问路径(http://192.168.109.12/kgc/ky19/index.js),然后匹配他所拥有的虚拟主机,即匹配connector拥有的绝对路径index.jsp,匹配完之后给servlet

5、 servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码

然后原路返回


相关文章
|
3月前
|
Prometheus 监控 Java
Tomcat
Tomcat
25 1
|
XML Java 应用服务中间件
Tomcat使用总结
Tomcat使用总结
66 0
|
网络协议 Java 应用服务中间件
你还在用tomcat ?out了
Netty作为高性能服务器讲解
|
Oracle 前端开发 Java
Tomcat1
Tomcat1
138 0
|
Java 应用服务中间件
Tomcat2
Tomcat2
82 0
|
XML Java 应用服务中间件
tomcat详解
tomcat详解
184 0
|
前端开发 网络协议 Java
|
Java Unix 应用服务中间件
tomcat介绍
tomcat介绍
|
安全 Java 应用服务中间件
Tomcat8
Tomcat8
218 0
Tomcat8
|
应用服务中间件
Tomcat知识1
Tomcat知识1
104 0