Java八股—各种服务器概念区分
之前在学习Java的时候,总是听见客户端、服务端、Nginx、Tomcat以及Servlet等等和服务器相关的概念。但是当时一直是懵懵懂懂的。直到最近进行了一个总结。
首先在介绍这些概念之前,来看一些基本的概念。
首先容器:容器是一个运行时的环境。它有两个功能。
- 第一,为要执行特定功能的组件(比如Servlet)提供一切供其执行的环境;
- 第二,管理这个组件的生命周期。
在其中我们提到了组件,那么对于组件这个概念,可以认为组件是能够完成特定功能并且能够被复用的最小单元。
具体关于组件是什么,对于设计层面是抽象的,比如说我一个或一组类;在应用层面就是具体的在实施功能的实例或者是工具类。
那么有了这些基本概念之后,我们再来看。
客户端与服务端:
客户端就是我们平常所使用的上网的工具,比如浏览器、PC应用与手机APP等,有发起网络请求和接收响应的功能。当然也要有一台硬件设备来部署这些。
而服务端就是用来处理这些客户端发来的网络请求,并返回响应的软件。比如Web服务软件,其通常都是部署在服务器上面。
而我们常常听见的Tomcat,Nginx都是服务端,也就是服务软件。(这里说明一下,常常我们都会把服务端说成服务器,比如Web服务器)
对于Tomcat:其是一个开源的Web服务器和Servlet容器
- 从Web服务器来理解,其是一个外壳,而核心通常都是JavaWeb应用。
- 对于Servlet来讲,Tomcat为Servlet提供处理请求的环境以及管理Servlet。
而对于Nginx,其也是一个服务软件,它是一个高性能的Http服务器和反向代理服务器,也可以作为负载均衡器使用。
- 作为Http服务器:因为其也是一个服务端,如果说是客户端请求的是静态资源,那么Nginx就可以直接返回。例如在前后端分离的系统中,通常都是把前端的静态资源部署到Nginx服务器上,请求静态资源的时候就可以直接返回。
- 其作为反向代理:对于前后端分离的项目来讲,如果是动态请求,那么就会将请求转发到后端Tomcat。
- 其作为负载均衡器,将客户端的请求分发到多个后端服务器。
对于上文提到的Servlet,是JavaWeb的一个核心组件,可以用来接收客户端请求,处理业务逻辑,并最终返回响应。通常是在Tomcat中。
其中有Tomcat进行监听,当监听到请求的时候,会把请求的url进行解析,Tomcat根据解析的url选择对应的Servlet实例。
整个流程可以进行一个总结:
首先,部署在客户机器上的客户端与部署到服务器之间的Nginx进行三次握手,若是请求静态资源,直接返回,若是动态请求,那么Nginx会与Tomcat进行三次握手,建立连接;Tomcat将请求给Servlet,Servlet处理并生成响应,最后Tomcat将响应给Servlet,最终Nginx将响应给客户端。