网页请求_03_网页应用服务器Tomcat接收请求并且发出响应

40 阅读5分钟

Tomcat 接收请求的过程

一、Tomcat的组件

1、Tomcat的核心组件

图片1.png

Tomcat的核心组件主要有:Server、Service、Connector、Engine、Host和Context。通常情况下一个Server可以包含多个Service,一个Service可以包含多个Connector,但只能包含一个Engine,一个Engine可以包含多个Host,一个Host可以包含多个Context。

(1)Server 是整个配置文件的唯一根元素,代表整个 Tomcat 容器。Server 内部可以包含多个 Service,其主要职责就是管理多个 Service,对外提供给客户端访问,同时维护所有 Service 的生命周期,包括初始化服务、结束服务、定位客户端要访问的 Service 等等。

图片2.png

(2)Service 的主要职责就是将 Engine 与 Connector 装配在一起对外提供服务。一个 Service 可以包含多个 Connector (不同的协议),但只能包含一个 Engine,其中 Connector 负责从客户端接收请求,Engine 负责处理 Connector 接收进来的请求。Tomcat配置多个Service,多个同名的应用运行在一个tomcat下。将第一个Connector元素的port属性由8080改为其他未使用的端口,如8081;将第二个Connector元素的port属性由8009改为其他未使用的端口,如8010。

(3)Connector是主要负责接收请求的组件。Connector作为通信接口,它为其所属特定的 Service 接收外部客户端请求,以及回送应答至外部客户端。具体职责包括创建 Request、Response 对象用于跟外部客户端交换数据,并将 Request 交给配套的 Engine 来处理。

图片3.png

(4)Engine 是 Service 组件中负责请求处理的组件,其内部可以包含多个 Host(不同的域名)。Engine 从一个或多个 Connector 中接收请求并处理,并将处理结果封装成应答交给 Connector,最终回传给外部客户端。

(5)Host 代表一个虚拟主机,它对应计算机网络上的一个实体。即某个在 DNS 服务器上注册过的域名或者 IP 地址,例如:www.baidu.com或 201.187.10.21。Host 内部可以包含多个 Context,每个 Context 表示一个 Web 应用。Host 负责安装、展开、启动和结束每个 Web 应用。

(6)Context 代表在特定虚拟主机上运行的一个 Web 应用,负责处理某个特定 Web 应用的所有请求。

图片4.png

 

2、Tomcat处理HTTP请求

当以 HTTP 请求到达Tomcat服务器(Server)以后,Tomcat会进行以下几个步骤,将请求交给对应的Web应用进行处理

(1)根据协议类型和端口号选定 Service 和 Engine。Connector 主要负责接收请求。当 Connector 接收到特定协议和特定端口的请求后,其所属的 Service 和 Service 下的 Engine 也就确定了

(2)根据域名或 IP 地址选定 Host。Engine一旦确定了,就会根据 IP 来选择对应的虚拟主机Host来处理请求。如果匹配失败了,则会使用默认虚拟主机来处理请求

(3)根据 URI 选定 Context。URI 中的 context-path 指定了 HTTPS 请求将要访问的 Web 应用。当请求抵达时,Tomcat 将根据 Context 的属性 path 取值与 URI 中的 context-path 的匹配程度来选择 Web 应用处理相应请求

  图片5.png 参考: www.cnblogs.com/haimishasha…

参考:www.cnblogs.com/frankltf/p/…

二、Servelt/JSP是如何处理请求并且做出反应?

1. Web应用中的核心组件

图片6.png

Listener:监听器 Listener 主要用于监听 Application、Session、Request 等对象的变化,每当这些对象发生变化就会回调用对应的监听方法。

Filter:过滤器 Filter 负责对请求做预处理,接着将请求交给 Servlet 进行处理并生成响应,最后 Filter 再对响应进行后处理。

2. 原生的Servlet和JSP

一开始是将HTML代码一行行复制到Servlet中,然后拼接数据,最后向客户端响应拼接好的HTML页面。后来在JSP中直接写HTML代码和Java代码,后期JSP编译成一个Servlet[通过Java代码获取后台数据后拼接到HTML片段中,最终通过out.println()输出]。

图片7.png

图片8.png

图片9.png

图片10.png

参考:www.zhihu.com/question/23…

三、SSM框架是如何处理请求并且做出反应?

图片11.png

图片12.png

Spring MVC的核心组件

SSM 框架,DispatcherServlet 充当了 Web 应用中的 Serlvet,负责将任务分配给对应的Controller,并将最终视图返回给 Web 容器。

核心组件:

  • 前端控制器_ DispatcherServlet(不需要程序员开发): 作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

  • 处理器映射器_HandlerMapping(不需要程序员开发):作用:HandlerMapping 负责根据用户请求映射获得对应的 Handler和 HandlerInterceptor。处理方法为从 URL 获得 URI,在通过 URI 从 HandlerMapping 中找到对应的 Handler 和 HandlerInterceptor,即处理器和拦截器

  • 处理器拦截器_HandlerInterceptor(不需要程序员开发)主要负责在执行 Handler 前对其进行拦截。HandlerInterceptor 中的 preHandler() 方法将会提取 HTTP 请求中的数据填充到处理器 Handler 的中。

  • 处理器Handler 即Controller ,是处理业务代码的核心器件。这部分由程序员自行编写,一般的SSM框架中,其下层还有Service和Dao。  

  • 视图解析器 ViewResolver(不需要程序员开发)

四、前后端分离项目是如何处理请求并且做出反应?

后端只负责处理数据,不涉及页面的渲染,前面的原生Servlet和SSM都涉及到了后端渲染

图片13.png