目录
SpringMVC
什么是SpringMVC
MVC概念
Spring MVC 创建和连接
转发vs重定向
获取参数
1.基础数据类型/包装类型(无注解)
添加@RequestParam注解
2.自定义对象(无注解)
3.form-data格式的文件上次
4.使用自定义类型接收json数据=》@RequestBody注解
5.获取URL中参数@PathVariable
如果方法参数的变量名需要和关联的字段不一样=》@RequestParam
6.获取 Request 和 Response 对象
7.获取请求头,Session
@RequestHeader:获取请求头某个字段的值
@CookieValue:接收请求头Cookie中的某个字段的值
返回响应
1.返回网页
2.返回text
3.返回json
组合注解:
什么是SpringMVC
1.Spring MVC 是一个 Web 框架。
2.Spring MVC 是基于 Servlet API 构建的
MVC概念
MVC 是 Model View Controller 的缩写
Controller:控制器,用于处理请求和响应
Model:模型对象,对应请求数据和响应数据转换的对象
View:视图,返回给前端使用的
Spring MVC 创建和连接
Spring MVC 项目创建和 Spring Boot 创建项目相同(Spring MVC 使用 Spring Boot 的方式创建),在创建的时候选择 Spring Web 就相
当于创建了 Spring MVC 的项目。
在 Spring MVC 中使用 @RequestMapping 来实现 URL 路由映射。
//表示当前类是web控制器,处理请求响应
@Controller
//类/方法注解:表示服务资源的信息(路径,请求方法等等)
@RequestMapping("/user")
public class UserController {
//返回值(字符串)是网页的路径,此时,会真正的返回对应网页的内容
@RequestMapping("/login")
public String login(){
return "/index.html";
//转发
// return "forward:/index.html";
//重定向
// return "redirect:/index.html";
}
这样实现之后,当访问地址:http://localhost:8080/user/login 时就能访问index.html这个网页了。
转发vs重定向
转发:一次请求去,返回去其他路径的结果,路径不变。返回网页默认就是转发
重定向:两次请求。第一次返回301/302/307重定向状态码+Location重定向的地址。第二次浏览器自动发送location路径的请求。路径改
变其。
获取参数
1.基础数据类型/包装类型(无注解)
@RequestMapping("/type1")
public String 简单类型and没有注解(String username,String password,Integer age){
log.debug("username={}, password={}, age={}", username, password, age);
return "Done";
}
这样方法可以获取queryString,表单格式,from-data(不能是文件)。不可以获取json格式。
若变量名与请求数据不一致或者没有,就接收到的是null。
注意:如果是基础数据类型,请求数据就必须有这个字段。前端字段的类型,要和后端字段类型一致,否则也会报错
添加@RequestParam注解
=>使用在方法参数上。默认表示请求必须包含该字段
2.自定义对象(无注解)
方法同1.基础数据类型/包装类型
3.form-data格式的文件上次
//接收form-data上传的文件:请求是form-data格式,包含head字段的文件
@RequestMapping("/upload")
public String 对象(MultipartFile head){
log.debug("接收的上传文件名称:{}", head.getOriginalFilename());
return "Done";
}
@RequestMapping("/upload2")
public String 上传文件2(@RequestParam MultipartFile head){
log.debug("接收的上传文件名称:{}", head.getOriginalFilename());
return "Done";
}
@RequestMapping("/upload3")
public String 上传文件3(@RequestPart MultipartFile head){
log.debug("接收的上传文件名称:{}", head.getOriginalFilename());
return "Done";
}
@RequestPart
@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的
@RequestParam
@RequestParam支持’application/json’,也同样支持multipart/form-data请求
4.使用自定义类型接收json数据=》@RequestBody注解
//接收json格式的数据:@RequestBody
@RequestMapping("/json")
public String json(@RequestBody User user){
log.debug("user对象接收的数据:{}", user);
return "Done";
}
5.获取URL中参数@PathVariable
如果方法参数的变量名需要和关联的字段不一样=》@RequestParam
6.获取 Request 和 Response 对象
@RequestMapping("/param10")
public String param10(HttpServletResponse response, HttpServletRequest request) {
String name = request.getParameter("name");
//获取所有 cookie 信息
Cookie[] cookies = request.getCookies();
return name + " 你好.";
}
7.获取请求头,Session
@RequestHeader:获取请求头某个字段的值
@RequestMapping("/header")
public String header(@RequestHeader("Accept-Encoding") String encoding){
log.debug("获取到的Header字段:{}", encoding);
return "Done";
}
@CookieValue:接收请求头Cookie中的某个字段的值
@RequestMapping("/cookie")
public String cookie(@CookieValue("yyy") String xxx){
log.debug("获取到的Cookie字段:{}", xxx);
return "孔子说:中午不睡觉,下午嗷嗷叫;孟子说:孔子说的对";
}
返回响应
1.返回网页
import com.example.demo.model.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/p")
public class PersonController {
@RequestMapping("/index")
public Object index(){
// 执行业务...
// 返回view -> index.html
return "/index.html";
}
}
2.返回text
加@ResponseBody
@RequestMapping("/m7")
@ResponseBody
public String method_7() {
return "Hello";
}
3.返回json
//返回json字符串:@ResponseBody,且方法的返回值为List,Map,自定义类型即可
@RequestMapping("/response")
@ResponseBody
public Object response(){
Map<String, Object> map = new HashMap<>();
map.put("username", "张三");
map.put("nickname", "小张");
return map;
}
}
组合注解:
@RestController:类注解,等同于@Controller+@ResponseBody
@GetMapping:方法注解,等同于@RequestMapping(method=RequestMethod.GET)
只提供get服务方法
@PostMapping:方法注解,等同于@RequestMapping(method=RequestMethod.POST)
只提供post服务方法
补充:@RequestMapping提供所有的服务方法get,post,put等等