本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。
博客涉及框架的重要知识点,根据序号学习即可。
目录
本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。
博客涉及框架的重要知识点,根据序号学习即可。
1、什么是MVC
1.1定义
1.2模型
1.3详解
2、什么是Spring Web MVC
2.1官方定义
2.2三大功能
2.3 模型
2.4建立连接
2.5@RequestMapping 注解
3、请求
3.1传递单个参数
3.2传递多个参数
3.3传递数组
3.4传递集合
3.5传递JSON
3.6在URL中获取参数
3.7文件上传
编辑
4、响应
4.1返回静态页面
4.2返回数据@Responsebody
4.3返回HTML代码片段
4.4返回JSON
4.5设置状态码
4.6设置header
4.6.1设置Content-Type
4.6.2设置其他header
5、应用分层
5.1什么是应用分层
5.2如何分层-----三层架构
5.3MVC与三层架构的区别
1、什么是MVC
1.1定义
1.2模型
1.3详解
- View(视图) 指在应⽤程序中专门用来与浏览器进行交互,展示数据的资源.
- Model(模型) 是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分
- Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图。即⽤来连接视图和模型
2、什么是Spring Web MVC
2.1官方定义
2.2三大功能
2.3 模型
2.4建立连接
2.5@RequestMapping 注解
- @RequestMapping 即可修饰类,也可以修饰⽅法 ,当修饰类和⽅法时,访问的地址是类路径 + 方法路径
- @RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
- @RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息
3、请求
3.1传递单个参数
(1)后端代码:
@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/m1")public String m1(String name){//传递单个参数return "传递的单个参数为:"+name;}
}
运行结果:
(2)后端代码:
@RequestMapping("/m2")public String m2(int age){//传递单个参数 接收参数为基本数据类型时,必须传参,否则会报500,所以最好用包装类接收return "传递的单个参数为:"+age;}
运行结果:
3.2传递多个参数
(1)后端代码:
@RequestMapping("/m3")public String m3(String name,String password){//传递多个参数 return "name:"+name+",password:"+password;}
运行结果:
(2)后端代码:
@RequestMapping("/param")
@RestController
public class ParamController { @RequestMapping("/m4")public String m4(Person person){//传递多个参数return person.toString();}
}public class Person {private int id;private String name;private String password;@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
运行结果:
(3)后端代码:
@RequestMapping("/m5")public String m5(@RequestParam(value = "username",required = false) String name){//重命名,前后端定义的字段名不一样 前端:username 后端:name//并且@RequseParam注解是必传,没有传参会报错 除非required设置为falsereturn " 接收到的name:"+name;}
运行结果:
3.3传递数组
后端代码:
@RequestMapping("/m6")public String m6(String[] arr){//传递数组return Arrays.toString(arr);}
运行结果:
3.4传递集合
后端代码:
@RequestMapping("/m7")public String m7(@RequestParam List<Integer> list){//传递集合和传递数组类似,同一个请求参数名有多个时,默认情况下是封装为数// 组的,但是如果要封装到集合,要使用注解//@RequestParam 绑定参数关系return "size:"+list.size()+",list:"+list;}
运行结果:
3.5传递JSON
后端代码:
@RequestMapping("/m8")public String m8(@RequestBody Person person){//传递JSON,需要使用@RequestBody注解//requestbody:请求正文,意思这个注解作用//在请求正文的数据绑定,请求参数必须写在请求正文中return person.toString();}
运行结果:【用postman进行接口测试】
3.6在URL中获取参数
后端代码:
@RequestMapping("/m9/{id}/{name}")public String m9(@PathVariable Integer id,@PathVariable String name){//获取URL中的参数//@PathVariable,这个注解主要作用在请求url路径上的数据绑定return "id:"+id+",name:"+name;}
运行结果:
3.7文件上传
后端代码:
@RequestMapping("/m10")public String m10(@RequestPart MultipartFile file) throws IOException {//上传文件使用注解@RequestPart//获取文件名称String fileName=file.getOriginalFilename();//文件上传到指定路径file.transferTo(new File("D:/108code/"+file.getOriginalFilename()));return "接收到的文件名"+fileName;}
运行结果:
4、响应
4.1返回静态页面
静态页面index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body>hello,index
</form>
</body>
</html>
后端代码:
@RestController
@RequestMapping("/index")
public class IndexController {@RequestMapping("/m1")public Object m1(){//返回静态页面return "/index.html";}
}
结果:
@Controller
@RequestMapping("/index")
public class IndexController {@RequestMapping("/m1")public Object m1(){//返回静态页面return "/index.html";}
}
4.2返回数据@Responsebody
@RequestMapping("/m2")public Object m2(){//返回数据@ResponseBodyreturn "/index.html";}
4.3返回HTML代码片段
@RequestMapping("/m3")public String m3(){//返回HTML代码片段return "<h1>hello,html</h1>";}
4.4返回JSON
@RequestMapping("/m4")public HashMap<String,String> m4(){//返回JSONHashMap<String,String> map=new HashMap<>();map.put("java","java value");map.put("mysql","mysql value");return map;}
4.5设置状态码
@RequestMapping("/m5")public String m5(HttpServletResponse response){//设置状态码response.setStatus(401);return "设置状态码成功";}
【Fiddle抓包查看状态码是否设置成功】
4.6设置header
4.6.1设置Content-Type
@RequestMapping(value = "/m6",produces = "application/json")public String m6(){//设置content-typereturn "{\"success\":true}";}
4.6.2设置其他header
@RequestMapping(value = "/m7")public String m7(HttpServletResponse response){//设置其他headerresponse.setHeader("MyHeader","MyHeaderValue");return "设置header成功";}
5、应用分层
5.1什么是应用分层
5.2如何分层-----三层架构
(1)之前学习的 "MVC", 就是把整体的系统分成了 Model(模型), View(视图)和Controlle(控制器)三个层次,也就是将用户视图和业务处理隔离开,并且通过控制器连接起来,很好地实现 了表现和逻辑的解耦,是⼀种标准的软件分层架构。
- 表现层: 就是展⽰数据结果和接受⽤⼾指令的,是最靠近⽤⼾的⼀层
- 业务逻辑层: 负责处理业务逻辑, ⾥⾯有复杂业务的具体实现
- 数据访问层: 负责存储和管理与应⽤程序相关的数据
- Controller:控制层。接收前端发送的请求,对请求进⾏处理,并响应数据。
- Service:业务逻辑层。处理具体的业务逻辑。
- Dao:数据访问层,也称为持久层。负责数据访问操作,包括数据的增、删、改、查
5.3MVC与三层架构的区别
- MVC架构模式由三部分组成, 分别是: 模型(Model), 视图(View)和控制器(Controller);三层架构将业务应⽤划分为:表现层, 业务逻辑层, 数据访问层
- MVC中, 视图和控制器合起来对应三层架构中的表现层. 模型对应三层架构中的业务逻辑层, 数据层, 以及实体类,二者其实是从不同⻆度对软件工程进行了抽象
- MVC模式强调数据和视图分离, 将数据展示和数据处理分开, 通过控制器对两者进行组合;三层架构强调不同维度数据处理的高内聚和低耦合, 将交互界⾯, 业务处理和数据库操作的逻辑分开。角度不同也就谈不上互相替代了。