SpringMVC执行原理
简单分析执行流程:
-
客户端发出HTTP请求,Web应用服务器接受此请求。若匹配DispatchServlet的请求映射路径(在Web.xml 中指定),则Web容器将该请求转交给DispatchServlet处理。
-
DispatchServlet接收到该请求后,根据请求的信息(包括URL、请求参数、HTTP方法等)及HandlerMapping的配置(在< servletName>-servlet.xml中配置)找到处理请求的处理器(Handler)。
-
当DispatchServlet根据HandlerMapping找到对应当前请求的 Handler 之后,通过 HandlerAdapter 对 Handler 进行封装,再以统一的适配器接口调用 Handler 。HandlerAdapter 可以理解为具体使用 Handler 来干活的人,HandlerAdapter 接口里一共有三个方法。如下图:HandlerAdapter 接口提供的方法。
-
boolean supports(Object handler);//方法:判断是否可以使用某个Handler。 ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler);//具体使用Handler干活。 long getLastModified(HttpServletRequest request, Object handler);//该方法:获取资源的Last-Modified。
-
在请求信息到达真正调用 Handler 的处理方法之前的这段时间内,Spring MVC 还完成了很多工作,它会将请求信息以一定的方式转换并绑定到请求方法的入参中,对于入参的对象会进行数据转换、数据格式化以及数据效验等。这些都做完之后,最后才真正地调用 Handler 的处理方法进行相应的业务逻辑处理。
-
处理器完成业务逻辑处理之后将返回一个 ModelAndView 对象给 DispatchServlet , ModelAndView 对象包含了逻辑视图名和模型数据信息。
-
ModelAndView 对象中包含的是 “ 逻辑视图名 ”,而真正的视图对象。 DispatchServlet 会通过 ViewResolver 将逻辑视图名解析为真正的视图对象 View 。当然,负责数据展示的视图可以为 JSP、PDT、JSON 等多种数据格式,对此 Spring MVC 均可灵活配置。
-
当得到真实的视图对象 View 后, DispatchServlet 会使用 ModelAndView 对象中的模型数据对 View 进行视图渲染。
-
最终客户端获得响应消息,根据配置,可以是普通的 HTML 页面,也可以是一个 XML 或者 JSON 格式的数据等。
学习笔记,仅供参考。