微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

springmvc返回视图(解析)

spring aide_941 26℃

springmvc返回视图(解析)
1.什么是视图?

视图就是展示给用户看的结果。可以是很多形式,例如:html、JSP、excel表单、Word文档、PDF文档、JSON数据、freemarker模板视图等等。

2.传统JSP和JSTL视图?

我们使用的internalResourceViewResolver解析器,默认支持JSP视图,而JSP中最常用的莫过于JSTL标签库了:该解析器默认使用的是JSTL解析器,要想使用JSTL标签需要导入JSTL的依赖

复制代码

jstl
jstl
1.2



jstl
jstl

复制代码
将一个user的集合放入模型中返回:数据如何在页面渲染

复制代码
@RequestMapping(value=”/show3″)
public ModelAndView show3(){
//创建模型视图,指定视图名
ModelAndView mv=new ModelAndView(“user-list”);
//创建用户列表,用于页面展示
List users=new ArrayList();
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”>

复制代码

//利用标签库中EL表达式遍历集合,展示到页面


ID UserName Name Age
${user.id} ${user.username} ${user.name} ${user.age}


复制代码
3.JSON视图

在实际开发中,我们经常需要以JSON的格式进行数据的传输,所以在SpringMVC中提供了一种非常便捷的方式来返回一个JSON视图。SpringMVC的JSON功能,底层依赖的是Jackson这个JSON工具

使用这个工具必须要引入该依赖:



com.fasterxml.jackson.core
jackson-databind

编写controller类,该注解@ResponseBody返回的是一个JSON视图(springmvc或自动把返回值转换为JSON格式)

复制代码
@RequestMapping(value=”test2″)
@ResponseBody
public List 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类无返回值的方法

转载请注明:SuperIT » springmvc返回视图(解析)

喜欢 (0)or分享 (0)