springmvc返回视图(解析)
1.什么是视图?
视图就是展示给用户看的结果。可以是很多形式,例如:html、JSP、excel表单、Word文档、PDF文档、JSON数据、freemarker模板视图等等。
2.传统JSP和JSTL视图?
我们使用的internalResourceViewResolver解析器,默认支持JSP视图,而JSP中最常用的莫过于JSTL标签库了:该解析器默认使用的是JSTL解析器,要想使用JSTL标签需要导入JSTL的依赖
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<dependency> <!--jsp相关-->
<dependency>
<groupId>jstl</groupId>
<artifactld>jstl</artifactld>
<dependency>
将一个user的集合放入模型中返回:数据如何在页面渲染
@RequestMapping(value="/show3")
public ModelAndView show3(){
//创建模型视图,指定视图名
ModelAndView mv=new ModelAndView("user-list");
//创建用户列表,用于页面展示
List<User> users=new ArrayList<User>();
for(int i=0;i<10;i++){
User user=new User();
user.setId(Long.valueOf(i));
user.setAge(20+i);
user.setname("张三"+i);
user.setUsername("zhangsan_"+i);
user.add(user);
}
//把用户列表添加到模型中
mv.addObject("users",users);
return mv;
}
在页面中引入JSTL标签库:
引入代码:<<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c">
<body>
<table>
<tr>
<th>ID</th>
<th>UserName</th>
<th>Name</th>
<th>Age</th>
</tr>
//利用标签库中EL表达式遍历集合,展示到页面
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.name}</td>
<td>${user.age}</td>
</tr>
</c:forEach>
</table>
</body>
3.JSON视图
在实际开发中,我们经常需要以JSON的格式进行数据的传输,所以在SpringMVC中提供了一种非常便捷的方式来返回一个JSON视图。SpringMVC的JSON功能,底层依赖的是Jackson这个JSON工具
使用这个工具必须要引入该依赖:
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
编写controller类,该注解@ResponseBody返回的是一个JSON视图(springmvc或自动把返回值转换为JSON格式)
@RequestMapping(value="test2")
@ResponseBody
public List<User> test2(){ User user = new User(); List<User> users=new ArrayList<>();
for (int i = 0; i < 10; i++) {
user.setAge(23);
user.setName("kater");
user.setSex(1);
user.setuserName("pick");
users.add(user);
}
return users;
}
原理:
1) 当SpringMVC读取到方法上的@ResponseBody注解时,就知道该方法不再使用默认的视图解析器解析视图,而是直接把结果写到响应体中,这样就需要对结果进行转换。
2) SpringMVC会从框架中查找有没有定义MessageConvertor(消息转换器),通过消息转换器转换结果,返回对应视图
3) 在SpringMVC的注解驱动类中,会进行默认的消息转换器注册,因为我们引入了jacksonJson包,所以会注册JSON的消息转换器
注解驱动类中的代码:
4) 因为只有JSON消息转换器可以对Java对象序列化,因此这里默认用了JSON转换
3.直接返回视图名称
SpringMVC允许直接返回一个String数据,作为视图名称。不需要数据模型。
@RequestMapping(value="test3")
public String test3(){
//如果只是访问页面,就不需要ModelAndView对象,直接返回一个字符串即可
return "index"; //访问的是index.jsp页面
}
也可以把视图和模型分离,不需要Model中的数据
@RequestMapping(value="test5")
public String test5(Model model){
model.addAttribute("msg","我试试Model好不好用");
return "index"; //访问的是index.jsp页面
}
4.重定向视图和转发视图?
转发和重定向的区别?
(1)转发的是同一次请求;重定向是两次不同请求
(2)地址栏的地址发生变化的为重定向,不发生变化的为转发
(3)转发数据不丢失,重定向数据丢失
5.不返回视图和JSON数据,只是返回成功的状态码?
注解:@ResponseStatus(HttpStatus.OK) controller类无返回值的方法
springmvc返回视图(解析)的更多相关文章
- SpringMVC——说说视图解析器
学习SpringMVC——说说视图解析器 各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请 ...
- SpringMVC源码分析6:SpringMVC的视图解析原理
title: SpringMVC源码分析6:SpringMVC的视图解析原理 date: 2018-06-07 11:03:19 tags: - SpringMVC categories: - 后端 ...
- SpringMVC 多视图解析器配置以及问题
在SpringMVC模式当中可以通过如下配置来支持多视图解析 <!-- jsp jstl --> <bean id="JSPViewResolver" class ...
- 学习SpringMVC——说说视图解析器
各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...
- SpringMVC的视图解析器
ViewResolver和View介绍 SpringMVC用于处理视图最重要的两个接口是ViewResolver和View.ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视 ...
- springMVC初探视图解析器——InternalResourceViewResolver
springmvc在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器. springmvc里提供了多个视图解析器,InternalResourceViewResolver就 ...
- SpringMVC框架——视图解析
SpringMVC视图解析,就是将业务数据绑定给JSP域对象,并在客户端进行显示. 域对象: pageContext.request.session.application 业务数据绑定是有ViewR ...
- springMVC初探视图解析器——ResourceBundleViewResolver
视图解析器ResourceBundleViewResolver是根据proterties文件来找对应的视图来解析”逻辑视图“的, 该properties文件默认是放在classpath路径下的view ...
- SpringMVC中视图解析器
视图解析器:固定写法直接coppy就行 1.dispatcherServlet-servlet.xml中添加 <!-- 视图解析器InternalResourceViewResolver --& ...
随机推荐
- 学习php必须要了解的一些知识
前言:每个人的成功都是用辛勤的劳动换来的 一.网络的基础知识 IP地址:Internet protocol address 指的是互联网协议地址,由二进制构成,(IPV4是32位的二进制),我们人为的 ...
- 用训练好的caffemodel对单个/批量图片进行分类
一.单个图片进行分类 这个比较简单,在*.bat文件中输入以下代码: @echo off set BIN_DIR=D:\caffe\caffe-windows\Build\x64\Release se ...
- scaffolding —— 脚手架(转)
Scaffolding — 基架 基于数据库架构生成网页模板的过程.在 ASP .NET 中,动态数据使用基架来简化基于 Web 的 UI 的生成过程.用户可以通过这种 UI 来查看和更新数据库. ...
- convex hull trick CF344.E
类似于斜率优化的东西,果真CF的E以后才会考点算法啊. 感觉这种优化应该很常见,但这题直线只有第一象限的,但是插入,和查找操作是不变的,按极角排序后就可以直接用这个模板了. #include < ...
- EF 批量更新删除(linq篇)
刚开始用EF很多东西都不会用,事后想想都很简单的东西总是用很麻烦的方式实现 1: EF的联合查询 inner join 很久很久以前我是这么写一个列表展示的,其中有两个字段Contractor和M ...
- 【BZOJ4724】[POI2017]Podzielno 数学+二分
[BZOJ4724][POI2017]Podzielno Description B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零, ...
- 【BZOJ4771】七彩树 主席树+树链的并
[BZOJ4771]七彩树 Description 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i]=c[j], ...
- docker related,docker history
History of an image and size of layers: docker history --no-trunc=true zabbix/zabbix-3.0 | tr -s ' ' ...
- [NOIP2018TG]旅行
[NOIP2018TG]旅行 树很简单,对每个点sort儿子,贪心走就行了 基环树呢? 如果是1e5可能不太好做 但是5000的话枚举断边就可以\(n^2\)了 #include<bits/st ...
- (4.16)sql server迁移DB文件(同一DB内)
SQL Server 修改数据库物理文件存在位置 关键词:迁移文件,迁移temp库(这怎么迁移呢,用方法2即可,需要重启实例) 三种均需要离线: 一共分为(1)脱机迁移和(2)在线迁移. (1)迁移方 ...