目录
一.简介
Spring Web MVC是包含在Spring框架中的用来构造web项目的框架,底层基于Servlet API.
(之前使用的SpringBoot也是创建Spring MVC的一种方式)
MVC(model view controller):把一个项目分成三部分,三部分之间的关系如下
Spring进行实现MVC模式,称为Spring MVC
二.建立连接(客户端和服务器)
@Requestmapping (路由映射):可以修饰方法,也可以修饰类。
访问地址:类的路径+方法路径
修饰方法
修饰类
在postman中观察可得:@Requestmapping支持get请求、post请求...
当想要指定一个具体的方法时,在代码中进行调整。
三.请求
1.传递单个参数
2.传递多个参数
发送请求的参数名称可以调换
注意:在代码中定义类型尽量使用包装类型(int的包装类为Integer),使用基本类型时,当输入的变量为空时会报错,而包装类型会显示为空。
3.对象
单独定义一个对象类,更方便后期根据需求修改代码。
java
package com.example.demo.controller;
public class Person {
Integer id;
String name;
Integer age;
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
后端参数重命名
前端传参是@requesPrama()中的
4.数组/集合
数组
当请求中同一个参数有多个时,浏览器就会帮我们封装成一个数组。
集合
默认传递的参数是数组形式,要是想要传递一个集合的形式,需要在参数前面加上**@RequestParam**
5.JSON
json本质上是一个字符串,表示对象的字符串。
传递json数据,需要使用**@RequestBody**
6.URL参数
获取一个url中的参数需要一个**@PathVariable**,获取多个url中的参数需要多个@PathVariable
需要注意顺序,顺序要与参数相匹配,参数个数也需要匹配
URL参数中的重命名
7.上传文件
@RequestPart
将图片上传到指定位置
8.获取cookie和session
(1)获取cookie
1)spring中获取指定个数的cookie,使用**@CookieValue**
2)获取多个cookie的方式(不是spring,采用最原始的方式,在控制台获取value值)
java
//获取多个cookie的方式
@RequestMapping("getCookie")
public String getCookie(HttpServletRequest request){
Cookie[] cookies=request.getCookies();
// 两种写法
// for (Cookie cookie : cookies) {
// System.out.println(cookie.getName()+":"+cookie.getValue());
// }
//空指针异常处理
if(cookies!=null){
Arrays.stream(cookies).forEach(cookie -> {
System.out.println(cookie.getName()+":"+cookie.getValue());
});
}
return "获取cookie成功";
}
(2)获取session
1)普通方式
java
//设置session
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request){
//创建session
HttpSession session= request.getSession();
//给session赋值
session.setAttribute("username","swy");
return "success";
}
//获取session
@RequestMapping("/getSession")
public String getSession(HttpServletRequest request){
//session默认为true,没有session会自动创建一个,设置成false避免自动创建
HttpSession session= request.getSession(false);
if(session!=null){
String username=(String) session.getAttribute("username");
return "登录用户:"+username;
}
return "session为空!";
2)spring方式
@SessionAttribute
java
@RequestMapping("/getSession2")
//默认是一个必传参数
public String getSession2(@SessionAttribute(required = false) String username){
return "username:"+username;
}
3)使用HttpSession的方式
9.设置header
1)原始方式
2)spring方式
@RequestHeader
以上:
1.传递数组:同一个请求参数有多个时,会自动封装成数组
2.传递集合:@RequestParam
3.传递JSON:@RequestBody
4.上传文件:@RequestPart
5.Cookie :@CookieValue
6.Session:@SessionAttribute
7.Header:@RequestHeader
8.url:@PathVariable
9.文件:@RequestPart
四.响应
1.返回静态页面
1)创建一个简单的html页面
2)返回该页面
@Controller和@RestController
2.返回数据
@ResponseBody
可以修饰类、可以修饰方法。修饰类的时候,表示这个类下的所有方法,返回的均为数据。修饰方法时,表示该方法返回的是数据。
如果一个类中返回的都是数据则把注释加在类上,如果一个类中只有相对应的方法中返回数据,则把该注释添加在相对应的方法上。
3.返回HTML代码片段
4.返回JSON
当返回的接口是String类型、Integer类型时,content-Type是text/html
当接口返回的是对象/Map时,content-Type自动设置成application/json
这里举例是返回一个对象:
5.设置状态码
设置状态码与页面展示无关
6.设置Header
平时很少用到
举例:设置header的返回类型属性:
举例:自定义header属性