SpringMVC的视图和视图解析器
Java知识点总结:想看的可以从这里进入
目录
- 2.4、视图、视图解析器
- 2.4.1、视图
- 2.4.2、视图解析器
2.4、视图、视图解析器
视图是渲染数据模型并将内容展示给用户,而视图解析器是将逻辑视图解析成真正的视图。
Spring MVC 支持 ModelAndView、Model、Map、View、String 多种类型的返回值,但无论控制器方法的返回值是哪种类型,Spring MVC 内部最终都会将它们封装成一个 ModelAndView 对象,它由 model(模型数据)和 view(逻辑视图名)两部分组成,所以 Spring MVC 需要借助 ViewResolver(视图解析器)将 逻辑视图名解析为真正的 View 视图对象,然后才能响应给客户端展示。
Spring MVC 的核心理念是将 视图与 数据模型进行解耦,视图技术随场景选择:Thymeleaf、JSP、FreeMarker、Velocity、Excel 等等。其中spring6已经取消了对JSP、FreeMarker的支持。
2.4.1、视图
视图是用来展示数据模型的。SpringMVC中定义了多种视图,但是它们都需要满足一个视图接口:View:
public interface View {/*** 包含响应状态代码的HttpServletRequest属性的名称*/String RESPONSE_STATUS_ATTRIBUTE = View.class.getName() + ".responseStatus";/*** 包含带有路径变量的 Map 的HttpServletRequest属性的名称*/String PATH_VARIABLES = View.class.getName() + ".pathVariables";/***选择响应内容类型*/String SELECTED_CONTENT_TYPE = View.class.getName() + ".selectedContentType";/*** 响应客户端的类型,可以使HTML、JSON、PDF等等*/@Nullabledefault String getContentType() {return null;}/***渲染的方法, model数据模型*/void render(@Nullable Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)throws Exception;}
当控制器返回ModelAndView时,解析器进行解析,将数据模型传给 render 方法,进行视图渲染。SpringMVC中的视图很多,但常用的视图的实现类有:
实现类 | 说明 |
---|---|
ThymeleafView | Thymeleaf 视图。使用 Thymeleaf 时,需要使用该视图类。 |
InternalResourceView | 转发视图,通过它可以实现请求的转发跳转。它也是 JSP 视图。 |
RedirectView | 重定向视图,通过它可以实现请求的重定向跳转。 |
FreeMarkerView | FreeMarker 视图. |
MappingJackson2JsonView | JSON 视图。 |
AbstractPdfView | PDF 视图 。 |
视图一般分为两类:
逻辑视图:view 是一个字符串的逻辑视图名,需要解析。
比如说ThymeleafView,它需要视图解析器根据配置去寻找我们完成的实际页面进行渲染
//这两种方式返回的都是逻辑视图 @RequestMapping("/test") public String test1(Model model) {return "success"; } @RequestMapping("/test") public ModelAndView test1() {ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("success");return modelAndView; }
非逻辑视图:返回的是一个真正的视图对象,不需要解析
如 MappingJackson2JsonView ,它返回的是JSON数据,不需要解析就可以将JSON视图直接展示给用户
@RequestMapping("/test") @ResponseBody public ModelAndView test(d) {return "返回字符串"; }
2.4.2、视图解析器
视图解析器用来解析逻辑视图,将其解析成真正的视图。
SpringMVC 提供了一个视图解析器的接口 ViewResolver,所有具体的视图解析器必须实现该接口。
public interface ViewResolver {/*** 按名称解析给定的视图。,locale配置国际化,viewName就是传递的逻辑视图名字*/@NullableView resolveViewName(String viewName, Locale locale) throws Exception;}
SpringMVC中也有很多不同的视图解析器,
视图解析器 | 说明 |
---|---|
BeanNameViewResolver | 将视图解析后,映射成一个 Bean,视图的名称就是 Bean 的 id。 |
InternalResourceViewResolver | JSP的视图解析器,映射一个 JSP 文件。 |
FreeMarkerViewResolver | FreeMarker 视图解析器,映射成一个 FreeMarker 模板文件。 |
ThymeleafViewResolver | Thymeleaf视图解析器,映射成一个 Thymeleaf 模板文件。 |
使用它们需要在XML中进行配置,配置前缀和后缀后,就可以在Controller中使用了,它解析的路径是:前缀+方法中返回的路径+后缀,就能解析到一个真正的视图。
视图解析器也可以同时配置多个,其中可以使用 order 指定它们之间的解析优先级顺序,Spring MVC 会遍历所有视图解析器,并按照其优先级依次对逻辑视图名进行解析,直到解析成功并返回视图对象为止。
<!--视图解析器 解析jsp文件,假如视图名为hello,则页面为/WEB-INF/hello.jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--逻辑视图名的规则,当控制器方法返回的逻辑视图名是以jsppage/开头时,它所对应的视图解析器才对视图进行解析。--><property name="viewNames" value="jsppage/*"/><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><!--视图解析器的优先级,值越小,优先级越高--><property name="order" value="2"/><property name="prefix" value="/WEB-INF/"/><property name="suffix" value=".jsp"/>
</bean><!--视图解析器 解析thymeleaf -->
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><!--视图解析器的优先级,值越小,优先级越高--><property name="order" value="1"/><!--定义视图文件的字符集--><property name="characterEncoding" value="UTF-8"/><!--配置前后缀--><property name="templateEngine"><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/templates/"/><!-- 视图后缀 --><property name="suffix" value=".html"/><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property>
</bean>
SpringMVC的视图和视图解析器相关推荐
- 使用springMVC提供的CommonsMultipartResolver文件解析器,实现文件轻松上传
springMVC提供的前端控制器,可以拦截所有请求,指挥调度所有后台逻辑资源. 使用传统方式进行文件上传,需要我们手动解析request对象,获取文件上传项,再进行文件的上传. springMVC框 ...
- springmvc视图解析器_SpringMVC视图及REST风格
什么是视图解析器? springMVC用于处理视图最重要的两个接口是ViewResolver和View. ViewResolver的主要作用是把一个逻辑上的视图名称解析成一个真的的视图,而Spring ...
- SpringMvc及三大组件(适配器、映射器、视图解析器)
文章目录 1 SpringMvc三大组件 适配器 映射器 视图解析器 1 @RequestMapping和@Controller **1. 什么是mvc** 2. SpringMvc三大组件及其作用 ...
- SpringMVC源码之参数解析绑定原理
摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...
- 学习SpringMVC——说说视图解析器
各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...
- 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化
管理springmvc组件 概述 在使用springmvc时要配置哪些东西 前端控制器 控制器映射器和适配器 映射器 Map<Set<String>,Object> Set& ...
- jsp springmvc 视图解析器_Springmvc中多视图解析器解析问题
最近被问到过几次关于springmvc多视图解析器解析的问题:总结一下. 1.问题: 假设我有两个jsp: WEB-INF/html/a.jsp WEB-INF/report/b.jsp 且我配置了视 ...
- springmvc如何使用视图解析器_SpringMVC的工作原理
SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMapp ...
- 7.SpringMVC 配置式开发-ModelAndView和视图解析器
ModelAndView 1.Model(模型) 1.model的本质就是HashMap,向模型中添加数据,就是往HashMap中去添加数据 2.HashMap 是一个单向查找数组,单向链表数组 3. ...
- --------------springMVC的开篇,以及底层执行流程,配置视图解析器,静态资源的访问,流程图,工作原理...
springMVC: 一:创建第一个项目 01.引入需要的jar包 web webmvc context context-support 02.在web.xml文件中 配置我们需要的核心控制器 Dis ...
最新文章
- 真正的人工智能至少还要几百年才能实现,你信吗?
- DGA短域名(360样本) mark下 下次分析可以参考
- Node简单服务器开发
- 被未知进程占用端口的解决办法
- 使用performance monitor 查看 每一个cpu core的cpu time
- 求大数的阶乘方法(数组)
- Java同步组件之Condition,FutureTask
- Java实现动态sin和cos函数图像
- 淘宝直通车怎样设置定向推广出价问题总结
- linux drop cache权限不够,Linux drop_caches
- 蝴蝶f8手机是鸿蒙系统,中华酷联御三家回归,从电信定制机到高端,你期待鸿蒙系统吗?...
- JMeter工具:场景设计,场景设置,场景运行,性能参数配置,测试监控
- Accton Technology and Wedge Networks Partnership Launches Orchestrated Secure SD-WAN
- 微信小程序开屏动画组件封装以及使用示例
- 第二篇第十一章灭火救援设施
- 嘘!捡漏啦!1919元=高性能电脑,满额+500京东卡...
- 用HTML开发Windows桌面应用程序
- 让一切都过去吧,高手挑战2过关方法
- 黑客与画家:Milvus x Cleveland Museum of Art
- 可以说是校招面试难度天花板了吧~