Web服务器、应用服务器与JavaEE中的网络架构
在刚刚学习SpringBoot的时候,虽然能够使用框架搭建起一个能对请求进行响应的服务器程序,但是关于网络请求以及http等相关的概念模糊不清,虽然知道SpringBoot内置有tomcat服务器,但是这个tomcat服务器具体起什么作用也不清楚,只知道是跟网络请求相关的。
所以在网上查找了一些相关资料,梳理过后决定写个博客记录一下。
绪论
在开始介绍服务器之前,我们先了解一下在JavaEE中网络请求解析的架构。
一次网络请求的流程具体是,由客户端即浏览器发出一个请求到互联网上的一台计算机,由该计算机的web服务器接受HTTP请求并解析,若是请求静态资源,则查找计算机上的静态资源文件并返回,若请求动态资源,则通过执行一段请求对应的业务逻辑代码再返回资源文件。
在执行动态资源请求时,我们需要根据HTTP请求调用不同的业务逻辑来进行处理与响应,而为了不与HTTP服务器耦合,我们需要做一个抽象,将HTTP服务器与具体的业务代码隔离。
如果要问为什么要隔离的话,总不能让我们去HTTP服务器的具体实现里去执行一段逻辑,判断什么请求需要调用什么业务。
隔离的方法就是Servlet接口,通过定义Servlet接口,所有业务类都实现Servlet接口,然后再用一个Servlet容器来对实现了接口的业务类进行管理和加载。
请问这里用到了什么设计模式?
而关于请求与对应业务加载的问题,就可以交给Servlet容器来解决,至于方法么,就是web.xml啦,通过web.xml配置文件,在Servlet容器中注册新的业务类,并标注请求与业务类的对应关系,这样容器就可以直接根据不同的常见选择不同的业务逻辑了。这一部分关于Servlet的内容合起来就可以叫做Servlet规范。
接下来就开始介绍我们的服务器
1. Web服务器
在通常情况下,我们将使用浏览器发出HTTP请求的一方叫做请求方,那么响应方就是我们所请求的计算机上的web服务器。
web服务器它只需支持HTTP协议、HTML文档格式及URL。其主要功能是传送页面使浏览器可以浏览,又因为它主要支持HTTP协议,所以通常情况下web服务器和HTTP服务器是相等的。通俗讲web服务器就是专门用来处理HTTP请求的。
从狭义上来讲,这里所说的web服务器指的是在软件层面上提供web服务器的应用程序,主要功能就是响应http请求,返回超文本文件等数据,或者对于动态请求,将请求转发到后面的应用服务器,目前常使用的Web服务器有Apache、Nginx、IIS三个。
而从广义上讲,Web服务器还可以是硬件层面上的一台性能更好的主机,在现实生活中通常表示为利用反向代理,负载均衡等技术组合多台计算机而成的一个机房。
2. 应用服务器
微软对它的定义:“我们把应用程序服务器定义为作为服务器执行共享业务应用程序的底层的系统软件。 就像文件服务器为很多用户提供文件一样,应用程序服务器让多个用户可以同时使用应用程序(通常是客户创建的应用程序)”
应用服务器主要用于动态资源的请求时,当请求方发送请求获取一个动态资源时,web服务器会将请求转发到应用服务器。应用程序通过执行各种业务逻辑来实现动态网页技术。
3. 比较特殊的轻量应用服务器(Tomcat/IIS)
轻量应用服务器的特点是作为web服务器的同时,还具备了解释执行服务端代码的能力,所以也可以称为带有服务器功能的web服务器。
早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎,Apache+Tomcat就相当于IIS+ASP(动态服务器页面)。后来的Tomcat已不再嵌入Apache内,Tomcat进程独立于Apache进程运行。 而且,Tomcat已经是一个独立的Servlet和JSP容器,业务逻辑层代码和界面交互层代码可以分离了。
上面绪论中已经介绍过了,对于JavaEE来说,Servlet是作为一个对象被放在Servlet容器中管理的。所以Tomcat就可以当作是一个Servlet容器。