响应
在我们前⾯的代码例⼦中,都已经设置了响应数据,Http响应结果可以是数据,也可以是静态⻚⾯,也可 以针对响应设置状态码,Header信息等.
1. 返回静态页面
创建前端⻚⾯index.html(注意路径)
html代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index⻚⾯</title>
</head>
<body>
Hello,Spring MVC,我是Index⻚⾯.
</body>
</html>
后台代码:
@RestController
public class IndexController {
@RequestMapping("/index")
public Object index(){
//返回index.html
return "/index.html";
}
}
运⾏结果:http://127.0.0.1:8080/index
结果却发现,⻚⾯未正确返回,http响应把 “/index.html” 当做了http响应正⽂的数据
那SpringMVC如何才能识别出来index.html 是⼀个静态⻚⾯,并进⾏返回呢?
我们需要把@RestController 改为@Controller
正确代码如下:
@Controller
public class IndexController {
@RequestMapping("/index")
public Object index(){
return "/index.html";
}
}
再次运⾏:http://127.0.0.1:8080/index
发现⻚⾯正确展⽰了
@RestController
和 @Controller
有着什么样的关联和区别呢?
咱们前⾯讲了MVC模式,后端会返回视图,这是早期时的概念
随着互联⽹的发展,⽬前项⽬开发流⾏"前后端分离"
模式, Java主要是⽤来做后端项⽬的开发,所以也就 不再处理前端相关的内容了
MVC的概念也逐渐发⽣了变化,View不再返回视图,⽽是返回显⽰视图时需要的数据.
所以前⾯使⽤的 @RestController 其实是返回的数据.
@RestController =@Controller +@ResponseBody
@Controller
:定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理.
@ResponseBody
:定义返回的数据格式为⾮视图,返回⼀个text/html信息
如果想返回视图的话,只需要把 @ResponseBody 去掉就可以了,也就是 @Controller
2. 返回数据@ResponseBody
我们上⾯讲到,@ResponseBody 表⽰返回数据.