视图
SpringMVC 中的视图
1、View 接口
2、作用:渲染数据,将模型 Model 中的数据展示给用户
3、默认种类:转发视图、重定向视图
DispatcherServlet 解析视图源码
1、模型、视图封装到 ModelAndView
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
2、执行转发结果
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
3、渲染
render(mv, request, response);
4、本地化环境
Locale locale =
(this.localeResolver != null ? this.localeResolver.resolveLocale(request) : request.getLocale());
5、获取视图名称
String viewName = mv.getViewName();
6、解析视图名称,获取视图对象
view = resolveViewName(viewName, mv.getModelInternal(), locale, request);
ThymeleafView
1、当控制器方法中,设置的视图名称没有任何前缀时,此时,SpringMVC 配置文件中,配置的视图解析器会解析视图名称,视图名称拼接视图前缀、视图后缀,得到的最终路径,通过转发的方式实现跳转
2、若使用的视图技术为 Thymeleaf,在 SpringMVC 配置文件中配置 Thymeleaf 视图解析器(org.thymeleaf.spring5.view.ThymeleafViewResolver),由此视图解析器解析之后所得到的视图是 ThymeleafView
转发视图
1、SpringMVC 默认转发视图:InternalResourceView
2、SpringMVC 中创建转发视图
(1)当控制器方法中,设置的视图名称以 forward: 为前缀时,创建 InternalResourceView
(2)此时,SpringMVC 配置文件中 ThymeleafViewResolver 不会解析视图名称,而是去掉前缀 forward: ,剩余部分作为最终路径,通过转发的方式实现跳转
3、只能转发到某个 HTML 请求,例:forward:/、forward:/road
重定向视图
1、SpringMVC 默认重定向视图:RedirectView
2、当控制器方法中,设置的视图名称以 redirect: 为前缀时,创建 RedirectView
3、此时,SpringMVC 配置文件中 ThymeleafViewResolver 不会解析视图名称,而是去掉前缀 redirect: ,判断剩余部分是否以 / 开头,若是,则会自动拼接上下文路径,剩余部分作为最终路径,通过重定向的方式实现跳转
4、只能重定向到某个 HTML 请求,例:redirect:/、redirect:/road
视图控制器
1、view-controller 标签
2、当控制器方法,只实现页面跳转,即只需要设置视图名称时,在 SpringMVC 的 xml 配置文件,使用 view-controller 标签进行表示
<!--
path:处理的请求地址,即@RequestMapping的value
view-name:请求地址对应的视图名称,即控制器方法返回的字符串
-->
<mvc:view-controller path="", view-name=""></view-controller>
3、当 SpringMVC 配置文件中,设置任何一个 view-controller 时,其他控制器中的请求映射将全部失效,此时需要在 SpringMVC 配置文件中,设置开启 MVC 注解驱动的标签
<mvc:annotation-driven/>
(1)当配置 view-controller,而不配置 annotation-driven,那么除了视图控制器中配置的请求,其他控制器方法将无法访问,即其他请求失效(404)
(2)当配置 view-controller,同时配置配置 annotation-driven,那么视图控制器中配置的请求和其他控制器方法都能够正常访问
(3)解决因配置视图控制器,导致其他请求失效(404)的问题
(4)解决因配置静态资源访问,导致其他请求失效(404)的问题
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战