在整理常用的Web中间件时,我发现自己对于Web服务器、Web中间件和Web容器的概念容易混淆,所以在整理常见的Web应用中间件时,我想先区别一下Web服务器、Web中间件和Web容器。
Web服务器也可以称为网站服务器,时提供Web服务的软件或主机,Web服务器可以处理HTTP协议,响应针对静态页面或图片的请求,进行页面跳转,或者把动态请求委托给其他程序。Web服务器可以向Web浏览器等客户端提供文档,也可以放置网站文件,让全世界浏览,更可以放置数据文件,让全世界下载。常见的Web服务器有IIS、Apache、nginx和Tomcat等。
中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。
也就是说,关于中间件,我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件。(注意:中间件是一类软件的总称,不是单独的一个软件)。
为了与页面产生交互操作,来获取动态结果,需要一些扩展机制能够让HTTP服务器调用服务端程序,Servlet技术产生了,可以把Servlet简单理解为运行在服务端的Java小程序,但是Servlet没有main方法,不能独立运行,因此必须把它部署到Servlet容器中,由容器来实例化并调用Servlet。而Tomcat和Jetty就是一个Servlet容器。为了方便使用,它们也具有HTTP服务器的功能,因此Tomcat或者Jetty就是一个“HTTP服务器 + Servlet容器”,我们也叫它们Web容器。
通过以上的概念理解,这三者其实是有包含关系的。
Web服务器:IIS、Apache、Nginx、Tomcat、Jboss、Jetty、Weblogic、Webshere、Glasshfish、Lighttpd等
Web中间件:Tomcat、Jboss、Jetty、Weblogic、Webshere、Glasshfish等
Web容器:IIS(asp容器)、Tomcat(servlet容器)、Jboss(EJB容器)
所以应该是 Web服务器>Web中间件>Web容器。
接下来整理基于Linux系统下的常见的Web中间件。
Apache HTTPD又可以简称为httpd或者Apache,它是Internet使用最广泛的web服务器之一,使用Apache提供的web服务器是由守护进程httpd,通过http协议进行文本传输,默认使用80端口的明文传输方式,当然,后来,为了保证数据的安全和可靠性,又添加了443的加密传输的方式,Apache提供的服务器又被称为:补丁服务器,原因很简单,它是一款高度模块化的软件,想要给它添加相应的功能只需添加相应的模块,让其Apache主程序加载相应的模块,不需要的模块也可以不用加载,保证了Apache的简洁,轻便,高效性,当出现大量访问一个服务器是可以使用多种复用模式,保证了服务器能快速回应客户端的请求,如MPM,端口复用技术。
适用于本地开发,小项目,或者是个人开发(免费的开放源代码的Web 应用服务器),Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet,但是Tomcat处理静态[HTML]的能力不如Apache服务器。
大项目或者商业项目,Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中,是美国bea公司出品的一个基于j2ee架构的中间件。
一些示例项目或者小项目常(开源的servlet容器),是使用Java语言编写的,Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test case中控制其运行。从而可以使[自动化测试]不再依赖外部环境,顺利实现自动化测试。
管理EJB的容器和服务器(开放源代码的项目),JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发。
IBM 的软件平台,它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。WebSphere 提供了可靠、灵活和健壮的软件。WebSphere 是一个模块化的平台,基于业界支持的开放标准。可以通过受信任和持久的接口,将现有资产插入 WebSphere,可以继续扩展环境。WebSphere 可以在许多平台上运行,包括 Intel、Linux 和 z/OS。
Nginx 是高性能的 HTTP 和反向代理的web服务器,Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。