当用户对SpringMVC应用程序发起请求时,这些请求都会被 DispatcherServle t处理,通过处理器找到最为合适的 HandlerMapping定义的请求映射中最为合适的映射,然后通过HandlerMapping找到相对应的Handler,然后再通过相对应的 HandlerAdapter 处理该Handler。返回结果是一个ModelAndView对象,当该ModelAndView对象中不包含真正的视图,而是一个逻辑视图路径的时候,InternalResourceViewResolver就会把该逻辑视图路径解析为真正的View视图对象,然后通过View的渲染,将最终结果返回给用户。
我们通过在Spring配置文件中配置如下代码使用InternalResourceViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/view/" p:suffix=".jsp"></bean>
视图解释器将逻辑视图转换为物理视图:将handler方法(如UserInfoController中的do方法)返回值解析为实际的物理视图,InternalResourceViewResolver视图解析器将handler方法返回值解析为"prefix+返回值+suffix"物理视图,并做请求转发操作
当发起请求时到达 DispatcherServlet 类里的 doService()
在向request里放如众多信息之后执行DispatcherServlet 类 的doDispatch()方法
在第一个方框中,ha是一个HandlerAdapter,该方法调用目标方法,返回一个ModelAndView对象,无论目标方法返回String类型、ModelMap类型、ModelAndView类型还是View类型,SpringMVC都会转化成一个ModelAndView类型对象。
在第二个方框中,代码用于处理视图,进入该方法
在第一个方框中 如果出现异常,则进入异常映射。
在第二方框中,该方法用于渲染视图
在第一个方框中,View是一个接口,在方框中定义的是一个抽象类。而在改行代码下,则是依次按情况对view赋值。
在第二个方框中,执行该代码,通过解析ViewName(视图名)得到视图。
在第三个方框中,该方法用于真正地渲染视图。鼠标点击该行代码,点击Ctrl+t,选择AbstractView,进入AbstractView抽象类的render方法
在执行上述红框中,该方法用于合并结果和模型,依旧鼠标点击该行代码,点击Ctrl+t,选择InternalResourceView,进入InternalResourceView类renderMergedOutputModel方法,
上面红框代码可知该响应为request转发。