概述
是基于MVC设计模式来实现的, 其中(POJO就是Model层,我们的JSP就是视图层,我们的Controller就是控制层。)
● 与前端进行交互
MVC模型
用来进行分层的结构, MVC(Model模型、View视图、Control控制层),将软件进行分层达到松耦合的效果。
在MVC设计模式中认为, 任何软件都可以分三层:控制层(Controller)、数据处理模型(Model)、负责展示数据的视图(View)。
源码分析
● 前端控制器DispatcherServlet: 接受请求(url和方法的匹配规则)和做出响应
● 处理器映射器HandlerMapping: 就是根据url找到对应的类对应的方法
● 处理器适配器HandlerAdaptor: 就是干活的(Controller-Service-Dao-db)
● 视图解析器ViewResolver: 就是准备网页上要展示数据的格式
● 视图渲染View: 给浏览器响应,在浏览器上做展示
工作原理
详细流程
- 客户端发送请求
- 前端控制器 DispatcherServlet 接收客户端请求
- 处理器映射 HandlerMapping 解析请求对应的 Handler
- 处理器适配器 HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑
- 处理器返回一个模型视图 ModelAndView
- 视图解析器进行解析
- 返回一个视图对象
- 前端控制器 DispatcherServlet 渲染数据(Moder)
- 将得到视图对象返回给用户
简单 MVC 项目
● Spring用来管理项目中的所有Bean,需要使用注解@Component @Autowired @Service @Component等
● Springmvc用来管理Controller层,需要使用的注解有@RestController @RequestMapping等
● 就是实现MVC三层代码间松耦合
● url -> Controller -> Service 获取数据 -> Service准备好的数据,返回给Controller层 -> 浏览器展示
Controller
创建 Controller 类
@RestController
@RequestMapping("/car")
public class CarController {
@Autowired
private CarService carService;
@RequestMapping("/get")
public Car get(){
return carService.get();
}
}
service
创建接口
//用来实现MVC里的C层的优化
public interface CarService {
//接口里的方法都是抽象方法
Car get();
}
创建实现类
@Service //和@Component一样
public class CarServiceImpl implements CarService{
@Override
public Car get() {
Car c = new Car();
c.setName("保时捷");
c.setColor("红色");
c.setPrice(641000.9);
return c;
}
}
Module
package cn.detu.pojo;
import org.springframework.stereotype.Component;
@Component //spring 框架提供的,用来ioc
public class Car {
private String name;
private String color;
private Double price;
public Car() { }
public Car(String name, String color, Double price) {
this.name = name;
this.color = color;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", price=" + price +
'}';
}
}
Run
package cn.detu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class);
}
}