图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。
2、执行原理解析
-
DispatcherSerlvet表示前端控制器,是整个SpringMVC的控制中心。用户发起的请求,DispatcherSerlvet接收请求并拦截请求
-
我们假设请求的url为:http://localhost:8080/SpringMVC/hello
-
如上url拆分成三部分:
-
http://localhost:8080:为服务器域名
-
SpringMVC:是部署在服务器上的web站点
-
hello:表示控制器
-
通过分析,如上url表示为:请求于服务器localhost:8080上的SpringMVC站点的hello控制器。
-
HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求的url查找Handler。
-
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
-
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
-
HanderAdapter表示处理器适配器,其按照特定的规则去指定Handler。
-
Handler让具体的Controller执行
-
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
-
HandlerAdapter将试图逻辑名或模型传递给DispatcherServlet。
-
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名
-
视图解析器将解析的逻辑视图名传给DispatcherServlet
-
DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
-
最终将视图呈现给用户。
DIspatcherServlet是前端控制器,是整个SpringMVC的控制中心。在接收用户发起的请求后,Dispatcher会自行去调用处理器映射(HandlerMapping),它会根据请求的url查找处理器(Handler),HandlerExecution表示具体的处理器(Handler),它会根据url查找控制器,并将解析后的信息返回给DispatcherServlet。
之后会有处理器适配器(HandlerAdapter),它会按照特定的规则去执行Handler,就是执行某个请求。特定的规则说白了就是去找控制器(Controller),只要是实现了Controller接口的它都会去适配一下,确定找到对应的控制器(Controller)。
然后控制器调用业务层将具体的执行信息返回给处理器适配器,返回的信息也就是需要给前端的数据并且我要指定这个前端是谁。
执行完这几步,它将请求处理完了,并且会携带一些数据(比如ModelAndView),又去找了DispatcherServlet
DispatcherServlet会调用视图解析器(ViewResolver)来解析处理器适配器传递的信息。
视图解析器做的事情就是获取了ModelAndView的数据,再解析ModelAndView的视图名字,并且拼接视图名,找到对应的视图,将数据渲染到视图上,之后它将解析的视图名传给DispatcherServlet。
3、简单概括
用户发起请求,经过DispatcherServlet,它是前端控制器,也是请求分发器,
首先会去调用HandlerMapping处理器映射,HandlerMapping根据请求的url将映射到的类返回。
然后会去调用处理器适配器HandlerAdapter,HandlerAdapter找到对应的控制器Controller(也就是对应的接口)去处理请求。
之后控制器会调用具体的业务,将获取到的数据(比如封装在了一个ModelAndView对象里)交给视图解析器ViewResolver。
最后视图解析器解析将获取到的数据,渲染到对应的视图上,呈现给用户。