视图

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)的问题

posted @   半条咸鱼  阅读(115)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示