-
步骤分析
-
1.浏览器客户端携带请求路径,本案例中是“/hello”,通过 web.xml 中的前端控制器配置,发送请求到前端控制器(DispatcherServlet),并加载 SpringMVC.xml 配置文件,将 HelloController 加载进IOC容器当中,创建 HelloController 对象
-
2.前端控制器(DispatcherServlet)接收到请求后根据请求消息交给处理器映射器(HandlerMapping),让 Controller 类中的方法去执行 "/hello",也就是请求映射,执行"sayHello()"方法,这里是 @RequestMapping(path="/hello") 注解起作用
-
3.处理器映射器(HandlerMapping)找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给前端控制器(DispatcherServlet),本案例返回的是 HelloController 类中的 sayHello()
-
4.前端控制器调用处理器适配器(HandlerAdapter)去执行返回的 Handler,也就是让处理器适配器执行sayHello() 方法,通过请求适配器执行
-
5.处理器适配器(HandlerAdapter)将会根据适配的结果去执行Handler,也就是sayHelllo()方法
-
6.Handler执行完成给适配器返回ModelAndView,将sayHello()执行的结果返回,本案例返回的是 success.jsp 页面
-
7.处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
-
8.前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
-
9.视图解析器向前端控制器返回View
-
10.前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
-
11.前端控制器向用户响应结果
SpringMVC组件
前端控制器(DispatcherServlet): 相当于 MVC 模式中的 C,本案例中即 controller 类,是整个流程控制的中心,由他调用其他组件处理用户请求,降低了组件之间的耦合性
处理器映射器(HandlerMapping): 负责根据用户请求找到 Handler 处理器,SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等
处理器(Handler): 即是我们开发中要编写的具体业务控制器,由 DispatcherServlet 把用户请求转发到 Handler,由 Handler 对具体的用户请求进行处理 处理器适配器
(HandlAdapter): 通过 HandlAdapter 对处理器进行执行,这是适配器模式的应用,通过拓展适配器可以对更多类型的处理器进行执行
视图解析器(View Resolver): 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户
视图(View): SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView 等,用的最多的视图就是 jsp