MVC设计模式
用来进行分层结构,这样代码分离结构清晰,各层代码,各司其职,易于开发大型项目
MVC(Model模型、View视图、Control控制层),将软件进行分层达到松耦合的效果,应该保证上面这三部分相互独立,互不干扰,每一个部分只负责自己擅长的部分,实现程序间的松耦合、提高代码复用性。
SpringMVC是基于MVC设计模式来实现的。
POJO类就是Model层,JSP就是视图层,Controller就是控制层
现在主流的SSM三大框架开发都是在MVC上继续演化,又分为持久层DAO,业务层Service,控制层Controller。持久层用来和数据库读写ORM,业务层用来处理复杂的业务逻辑,控制层用来处理MVC的控制。
SpringMVC的工作原理![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XH0fEJst-1623044111711)(RackMultipart20210607-4-13lyxac_html_e58ee630c0df1991.png)]](https://i-blog.csdnimg.cn/blog_migrate/6f407f18438f862df6904a64688ef997.png)
过程描述
- 客户端发送请求
- 前端控制器(DispatcherServlet)接受客户端请求
- 找到处理器映射器(HandlerMapping)解析请求对应的 Handler ;
- 处理器适配器(HandlerAdapter)会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑 ;
- 处理器返回一个模型视图 ModelAndView ;
- 视图解析器(ViewReslover)进行解析 ;
- 返回一个视图对象 ;
- 前端控制器(DispatcherServlet)渲染数据(Moder);
- 将得到视图对象返回给用户.。
案例
需求:
访问链接: http://localhost:8080/car/get
得到JSON数据: {"id":718,"name":"保时捷","type":"Cayman T","color":"红色","price":641000.0}
1.创建启动类
package cn.tedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
@SpringBootApplication
@Controller
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class);
}
}
2.创建POJO类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Car{
private Integer id;
private String name;
private String type;
private String color;
private Double price;
}
3.创建Controller类
package cn.tedu.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.tedu.pojo.Car;
@RestController
@RequestMapping("/car")
public class CarController {
@RequestMapping("/get")
public Car get() {
//保时捷718 Cayman T,红色,641000元起
Car car = new Car();
car.setId(718);
car.setName("保时捷");
car.setType("Cayman T");
car.setColor("红色");
car.setPrice(641000.0);
return car;
}
}
测试结果
{"id":718,"name":"保时捷","type":"Cayman T","color":"红色","price":641000.0}
@PathVariable注解的用法
后端服务器接收规则:
1.参数与参数之后使用 / 分隔
2.参数的位置一旦确定,一般不变.
3.接收的参数使用 {形参变量}
4.使用@PathVariable 接收
5.如果参数有多个建议使用对象接收 参数必须与属性一致,SpringMVC自动封装
注意事项: 如果名称不统一,则需要转化 具体如下:
@PathVariable("name") String username
//优化GET传参的restful方式
//GET方式访问: http://localhost:8080/car/insert?id=1&name=张三&age=18
//RESTFul方式访问: http://localhost:8080/car/insert/1/张三/18
@RequestMapping("insert/{id}/{name}/{age}")
//RESTFul配合@PathVariable注解一起用,使用{资源名}获取传过来的值
public void insert(@PathVariable int id,
@PathVariable String name,
@PathVariable int age) {
System.out.println("数据插入成功,id="+id+",name="+name+",age="+age);
}
RESTFul参数接收
RestFul介绍
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
定义: RESTFul 是一种请求的规则(语法/定义)
RESTFul说明
优化前:
Get请求: http://localhost:8090/findUserByNS?name=王昭君&sex=女
特点:
1.查询请求
2.参数直观 name=xxx
3.请求的结构冗余. 不合适多个参数的写法.
优化后:
http://localhost:8080/user/王昭君/女
优势:
1. 用户不能了解请求的意图 规定:请求方法名称不能出现 “动词”,只能写名词.
2. 参数保密, 只有后端服务器清楚参数的意义.
3. 请求字节传输量少 简洁.
注意事项:
1. URL地址中参数与参数之间使用 / 分隔.
2. 请求的参数的位置一旦固定,不可轻易修改.
3. 用户发请求时,就应该按照restFul的结构执行.
4. RESTFul请求一般以get请求为主. (put/delete/post)