Spring MVC 的生命周期
其实就是跟踪前台发送请求到后台再到响应的一个过程
下图是请求所经历的所有的站点
下面根据请求经过站点的顺序,开始分析:
1、刚刚离开浏览器的请求
首先,请求一般会存在两种信息:一种是包含请求的URL,一种则是内容信息(如:提交的表单信息)
此过程是请求进入到一个前端控制器DispatcherServlet
DispatcherServlet其实它本质上就是一个单例的Servlet,它的功能是将请求委托给应用程序的其他组件来执行实际的处理。
2、前端控制器:该把请求发送到哪个控制器
一个典型的应用程序中可能会有多个控制器。
DispatcherServlet需要知道应该把当前的请求发送到哪个控制器下,这个时候它回去查询一个或多个处理器映射(handler mapper)。
处理器映射会根据请求所携带的URL来进行决策,然后将结果返回给DispatcherServlet。
3、终于到了控制器
DispatchServlet经过第二站已经从处理器映射那知道了应该将请求发送到哪个控制器下。
DispatchServlet将当前的请求发送至指定的控制器下,请求会将内容信息交给控制器,并耐心等待控制器将内容处理后的结果。
请注意:设计良好的控制器很少甚至基本上不会做处理内容信息的工作,而是将其委托给一个或多个服务对象去处理。
4、处理完了,该回去了
控制器完成信息业务逻辑处理后,通常会产生一些信息,这些信息需要返回给用户并在浏览器上显示。
这些信息被称为模型(Model)。
我们不能把直接把模型返回,需要经过以用户友好的方式进行格式化(通常情况下是HTML),所以信息需要发送给一个视图(View),通常会是JSP。
控制器所做的最后一件事就是将数据打包,并且标示出用于渲染输出的视图名。它接下来会将请求连同模型和视图名发送回DispatchServlet。
注意:传递给DispatchServlet的视图名并不直接表示某个特定的JSP。实际上,它都不能确定视图就是JSP。它仅仅是传递了一个逻辑名称,这个结果将用来查找产生结果的真正视图。
5、真正的视图在那里
由上一步我们会知道DispatchServlet获得了视图名,确切的说是逻辑视图名。
DispatchServlet使用视图解析器,视图解析器对逻辑视图名进行解析,匹配为一个特定视图的实现。
然后将这个特定的视图返回给DispatchServlet。
6、视图的实现
由上一步我们知道,DispatcherServlet已经知道是哪个视图。
这一步主要将视图进行实现,在这里它交付数据模型。
7、渲染输出
视图将使用模型数据渲染输出,这个输出会通过响应对象传递给客户端。