SpringMVC的底层实现流程:
SpringMVC的核心是DispatchServlet,它负责接收HTTP的请求和协调SpringMVC中各个组件来完成请求处理的任务,一个请求被截获后,DispatchServlet会通过HanderMapping(处理映射器)去定位到特定的Controller(也可叫hander),然后通过HanderAdapter(处理调配器)去调用hander中的业务处理方法, 业务处理方法返回一个ModelAndView(模型数据与逻辑视图),交给DisparthServlet,DispatchServlet调用ViewResolver(视图解析器)解析出真实的视图对象,得到这个视图对象后,DispartServlet使用Model对其进行渲染,最终把结果返回给用户。
在这个渲染的过程中,发挥作用的就是ViewResolver和View。当Handler返回的 ModelAndView中不包含真正的视图,只返回一个逻辑视图名称的时候,ViewResolver就会把该逻 辑视图名称解析为真正的视图View对象。View是真正进行视图渲染,把结果返回给浏览器的。
SpringMVC用于处理视图最重要的两个接口是ViewResolver和View。ViewResolver的主要作用 是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对象呈现给客户端的 是View对象本身,而ViewResolver只是把逻辑视图名称解析为对象的View对象。View接口的主要 作用是用于处理视图,然后返回给客户端。(在dispatchServlet的doservice方法中调用了私有方法processDispatchResult, 该私有方法中调用了render(mv, request, response) ,此处的mv为controller层返回的ModelAndView类的一个实例,在该render方法中有一行view.render(mv.getModelInternal(), request, response);,即在该方法中会实现写入response中)。