各种容器和服务器之间的区别和联系
平时我们经常看到各种容器名称:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,还有各种服务器名称:应⽤服务器、WEB 服务器、WEB应⽤服务器、JavaWEB应⽤服务器、Java EE服务器等,这么多相似名称,难以弄明⽩它们之间的区别与联系。
下⾯我们尝试从它们的定义中,区分它们,出他们之间的联系,最后通过Apache、nginx、tomcat等举例说明容器以及服务器的联系。
1、容器与服务器的联系
如上图,我们先来看下容器与服务器的联系:容器是位于应⽤程序/组件和服务器平台之间的接⼝集合,使得应⽤程序/组件可以⽅便部署到服务器上运⾏。
2、各种容器的区别/联系
2-1、容器(Containers)
容器通常理解就是装东西的,我们这⾥说技术上的容器就是可以部署应⽤程序,并在上⾯运⾏的环境。
⼀般来说,它处理屏蔽了服务器平台的复杂性,使得应⽤程序在它的基础上可以⽅便快捷的部署;⽽对于应⽤程序来说,它就是位于应⽤程序和平台之间的接⼝集合。
容器管理组件的⽣命周期,向应⽤程序组件分派请求,并提供与上下⽂数据(如关于当前请求的信息)的接⼝。
注意,容器技术虚拟化(如Docker 应⽤容器引擎)不在本⽂关注范围内。
2-2、Servlet容器
Servlet:属于Java EE重要技术规范,构建了"接收请求--调⽤servlet程序处理--返回响应"基本模型。
Servlet程序:Java提供了开发Servlet程序的API,该API可以说Servlet容器的⼀部分,它对接应⽤程序与Servlet容器;
Servlet容器:就是实现了Servlet技术规范的部署环境,它可以部署运⾏Servlet程序。
2-3、Java WEB容器
WEB容器:可以部署多个WEB应⽤程序的环境。
Java WEB容器:实现了Java EE规定的WEB应⽤技术规范的的部署环境。
Java EE WEB应⽤技术规范:Servlet、JSP(JavaServer Pages)、Java WebSocket等。
所以,完整的Java WEB容器包含Servlet容器。
2-4、Java EE容器
Java EE容器:实现了Java EE技术规范的部署环境。
Java EE技术规范:除了上⾯说的Servlet、JSP等Java EE WEB应⽤技术规范,还包括EJB(Enterprise JavaBeans)等许多技术规范。
所以,完整的Java EE容器包含Java WEB容器(Servlet容器)、EJB容器等。
3、各种服务器的区别/联系
3-1、服务器(Server)
服务器是提供计算服务的设备。由于服务器需要响应服务请求,并进⾏处理,因此⼀般来说服务器应具备承担服务并且保障服务的能⼒。
简单来说,服务器是提供某些服务的设备。
3-2、应⽤服务器
应⽤程序:是指为针对使⽤者的某种应⽤⽬的所编写的软件。
应⽤服务器:就是运⾏应⽤程序,提供应⽤程序所实现服务的设备。
通常来说,服务器端的应⽤程序实现各种业务逻辑,应⽤服务器通过各种协议把这些业务逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径,以供客户端应⽤程序使⽤。应⽤服务器使⽤此业务逻辑就像调⽤对象的⼀个⽅法⼀样。
3-3、WEB服务器
WEB:现⼴泛译作⽹络、互联⽹等技术领域。表现为三种形式,即超⽂本(hypertext)、超媒体(hypermedia)、超⽂本传输协议(HTTP)等。
WEB服务器:⼀般指⽹站服务器,可以向浏览器等WEB客户端提供⽂档浏览、数据⽂件下载等WEB服务。
简单来说,WEB服务器是提供⽹上信息浏览等WEB服务的设备。
nginx和apache区别3-4、WEB应⽤服务器
上⾯我们把应⽤服务器和WEB服务器严格区分:应⽤服务器通过应⽤程序接⼝(通常是⽹络请求API)把业务逻辑暴露给客户端应⽤程序。⽽WEB服务器通过HTTP提供静态内容给浏览器等客户端。
如果不严格区分,应⽤服务器包含WEB服务器,因为WEB服务器是WEB服务应⽤程序实现的。
WEB应⽤服务器:结合应⽤服务器和WEB服务器,可以说,它是带应⽤服务器的Web服务器,接收HTTP请求后,既能返回页⾯等静态内容,⼜能处理业务逻辑返回数据。
3-5、Java EE服务器
Java EE服务器是实现Java EE技术规范,并提供标准Java EE服务的应⽤程序服务器。
Java EE服务器有时称为应⽤服务器,因为它们允许您向客户端提供应⽤数据,就像Web服务器向Web浏览器提供Web页⾯⼀样。
4、举例说明容器以及服务器的联系
4-1、Apache、Nginx、IIS
Apache、Nginx、IIS是⽬前最主流的三个Web服务器。
但是可以⽤它们来构建WEB应⽤服务器,通常它们发现⼀个请求是动态请求,就通过CGI、ISAPI、特殊管道等协议接⼝调⽤后⾯的应⽤服务器来协同处理请求。如Nginx通过fastCGI模块来调⽤ZendEngine执⾏PHP应⽤来处理PHP请求。
4-2、Tomcat、Jetty、WebLogic、Websphere、JBoss
Tomcat、Jetty、WebLogic、Websphere、JBoss都是Java(EE) WEB应⽤服务器。
拿最常⽤的Tomcat来说,Tomcat是Java Servlet,JavaServerPages,Java Expression Language和JavaWebSocket(Java EE)技术的开源实现。
因为可以通过HTTP提供HTML页⾯等静态内容的请求访问,所以是⼀个WEB服务器;
因为实现了Servlet规范,所以也是⼀个Servlet容器,可以运⾏Servlet程序;
因为可以通过Servlet容器,调⽤Servlet处理动态请求,所以也是⼀个应⽤服务器;
所以,可以说Tomcat是Java(EE) WEB应⽤服务器。
4-3、Nginx + Tomcat的WEB应⽤服务器(集)
⼀般在实际应⽤中,先是通过Nginx反向代理服务器接收请求,匹配分离动态/静态请求(动静分离),如果是静态请求,则转发到另外的Nginx WEB服务器上,返回静态内容;如果是动态请求,则转发到后⾯的Tomcat应⽤服务器,处理动态请求的业务逻辑。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。