首先看下这张图:
假如我们访问的url:http://localhost:8080/pro/hello
- 用户发送请求到前端控制器,前端控制器其实就是Spring的DispatchServlet,它是整个SpringMVC的控制中心,根据配置接受并拦截所有请求。
- 先把url拆成三部分:
- http://localhost:8080 服务器域名
- pro 部署在服务器上的web站点
- hello表示控制器
- 分析出来为:请求位于服务器localhost:8080上的pro站点的hello的控制器。
- HandlerMapping为处理器映射器。DispatcherServlet调用HandlerMapping, HandlerMapping根据请求url查找Handler。
- HandlerExecution表示具体的Handler,主要作用就是根据url查找控制器,比如:hello
- HandlerExecution将解析后的信息传递给DispatcherServlet,比如解析控制器映射。
- HandlerAdapter表示处理器适配器,按照特定的规则去执行Handler。
- Handler让具体的Controller去执行
- Controller将具体的执行信息返回给HandlerAdapter,比如ModelAndView。
ModelAndView可以理解为:我现在给前端携带着一些数据,并且我要指定这个前端是谁。
- HandlerAdapter将视图的逻辑名或模型传递给DispatcherServlet
- DispatcherServlet再去调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。(会经过解析视图名,拼接后找到视图,将数据渲染到视图上)
- 视图解析器将解析的逻辑视图传给DispatcherServlet。
- DispatcherServlet再根据视图解析器解析的结果调用具体的视图
- 最后呈现给用户。