3、SpringMVC执行原理

1、SpringMVC比较完整的流程图

图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

2、执行原理解析

  1. DispatcherSerlvet表示前端控制器,是整个SpringMVC的控制中心。用户发起的请求,DispatcherSerlvet接收请求并拦截请求

  • 我们假设请求的url为:http://localhost:8080/SpringMVC/hello

  • 如上url拆分成三部分:

  • http://localhost:8080:为服务器域名

  • SpringMVC:是部署在服务器上的web站点

  • hello:表示控制器

  • 通过分析,如上url表示为:请求于服务器localhost:8080上的SpringMVC站点的hello控制器。

  1. HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求的url查找Handler。

  2. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。

  3. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

  4. HanderAdapter表示处理器适配器,其按照特定的规则去指定Handler。

  5. Handler让具体的Controller执行

  6. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

  7. HandlerAdapter将试图逻辑名或模型传递给DispatcherServlet。

  8. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名

  9. 视图解析器将解析的逻辑视图名传给DispatcherServlet

  10. DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

  11. 最终将视图呈现给用户。

 

DIspatcherServlet是前端控制器,是整个SpringMVC的控制中心。在接收用户发起的请求后,Dispatcher会自行去调用处理器映射(HandlerMapping),它会根据请求的url查找处理器(Handler),HandlerExecution表示具体的处理器(Handler),它会根据url查找控制器,并将解析后的信息返回给DispatcherServlet。

之后会有处理器适配器(HandlerAdapter),它会按照特定的规则去执行Handler,就是执行某个请求。特定的规则说白了就是去找控制器(Controller),只要是实现了Controller接口的它都会去适配一下,确定找到对应的控制器(Controller)。

然后控制器调用业务层将具体的执行信息返回给处理器适配器,返回的信息也就是需要给前端的数据并且我要指定这个前端是谁。

执行完这几步,它将请求处理完了,并且会携带一些数据(比如ModelAndView),又去找了DispatcherServlet

DispatcherServlet会调用视图解析器(ViewResolver)来解析处理器适配器传递的信息。

视图解析器做的事情就是获取了ModelAndView的数据,再解析ModelAndView的视图名字,并且拼接视图名,找到对应的视图,将数据渲染到视图上,之后它将解析的视图名传给DispatcherServlet。

最后DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图,展现给用户。

 

3、简单概括

用户发起请求,经过DispatcherServlet,它是前端控制器,也是请求分发器,

首先会去调用HandlerMapping处理器映射,HandlerMapping根据请求的url将映射到的类返回。

然后会去调用处理器适配器HandlerAdapter,HandlerAdapter找到对应的控制器Controller(也就是对应的接口)去处理请求。

之后控制器会调用具体的业务,将获取到的数据(比如封装在了一个ModelAndView对象里)交给视图解析器ViewResolver。

最后视图解析器解析将获取到的数据,渲染到对应的视图上,呈现给用户。

致力于记录学习过程中的笔记,希望大家有所帮助(*^▽^*)!
原文地址:https://www.cnblogs.com/zxhbk/p/12976240.html