34.视图解析-【源码分析】-视图解析器与视图

2022/8/9 1:24:24

本文主要是介绍34.视图解析-【源码分析】-视图解析器与视图,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

视图解析原理流程:

目标方法处理的过程中(阅读DispatcherServlet源码),所有数据都会被放在 ModelAndViewContainer 里面,其中包括数据和视图地址。
方法的参数是一个自定义类型对象(从请求参数中确定的),把他重新放在 ModelAndViewContainer 。
任何目标方法执行完成以后都会返回ModelAndView(数据和视图地址)。
processDispatchResult()处理派发结果(页面改如何响应)
render(mv, request, response); 进行页面渲染逻辑
根据方法的String返回值得到 View 对象【定义了页面的渲染逻辑】
所有的视图解析器尝试是否能根据当前返回值得到View对象
得到了 redirect:/main.html --> Thymeleaf new RedirectView()。
ContentNegotiationViewResolver 里面包含了下面所有的视图解析器,内部还是利用下面所有视图解析器得到视图对象。
view.render(mv.getModelInternal(), request, response); 视图对象调用自定义的render进行页面渲染工作。
RedirectView 如何渲染【重定向到一个页面】
获取目标url地址
response.sendRedirect(encodedURL);
视图解析:
- 返回值以 forward: 开始: new InternalResourceView(forwardUrl); --> 转发request.getRequestDispatcher(path).forward(request, response);
- 返回值以 redirect: 开始: new RedirectView() --> render就是重定向
- 返回值是普通字符串:new ThymeleafView()—>

阅读源码:最好自己在IDE,打断点,且Debug模式运行实例,这样比较没那么沉闷。



这篇关于34.视图解析-【源码分析】-视图解析器与视图的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程