各种容器与服务器的区别与联系
平时我们经常看到各种容器名称:servlet容器、web容器、java web容器、java ee容器等,还有各种服务器名称:应用服务器、web服务器、web应用服务器、java web应用服务器、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服务的设备。
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,javaserver pages,java expression language和java websocket(java ee)技术的开源实现。
因为可以通过http提供html页面等静态内容的请求访问,所以是一个web服务器;
因为实现了servlet规范,所以也是一个servlet容器,可以运行servlet程序;
因为可以通过servlet容器,调用servlet处理动态请求,所以也是一个应用服务器;
所以,可以说tomcat是java(ee) web应用服务器。
4-3、nginx + tomcat的web应用服务器(集群)
一般在实际应用中,先是通过nginx反向代理服务器接收请求,匹配分离动态/静态请求(动静分离),如果是静态请求,则转发到另外的nginx web服务器上,返回静态内容;如果是动态请求,则转发到后面的tomcat应用服务器,处理动态请求的业务逻辑。
到这里,我们对各种容器以及各种服务器它们之间的区别与联系有了一个清楚的认识,后面将重点关注java在tomcat上的应用剖署,以及尝试进行nginx+tomcat的web应用服务的相关配置……
【参考资料】
1、oracle java官网相关文档:http://www.oracle.com/technetwork/cn/java/index.html
2、java官方站点:https://www.java.com/zh_cn
3、百度百科各词条
4、nginx详解:http://blog.csdn.net/tjiyu/article/details/53027619
5、tomcat:http://tomcat.apache.org/index.html
---------------------
作者:尐譽
来源:csdn
原文:https://blog.csdn.net/tjiyu/article/details/53148174
上一篇: JS闭包解析