SpringMVC
1.MVC
MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范
MVC的主要作用是降低了视图与业务逻辑间的双向耦合,提高代码的复用性
MVC是一种架构模式
2.MVC的作用
- 将url映射到Java类或Java类的方法
- 封装用户提交的数据
- 处理请求-调用相关的业务处理-封装相应数据
- 将响应的数据进行渲染
3.SpringMVC的作用
接收前端传递的数据,与用户进行交互
4.SpringMVC的特点
- 高效,基于请求的MVC框架
- 与Spring兼容性好,无缝衔接
- 约定优于配置
5.工作原理
1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping
3.HandlerMing找到具体的处理器(根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
4.DispatcherServlet调用HandlerMapping处理器映射器
5.HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
6.Controller执行完成返回ModelAndView
7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
11.DispatcherServlet响应用户
6.SpringMVC调用流程图
7.实例
7.1展示数据
get请求案例: http://localhost:8080/car/get
得到JSON数据:
{"id":718,"name":"保时捷","type":"Cayman T","color":"红色","price":641000.0}
思路:1)创建RunApp
2)创建Car封装id、name、type、color、price属性
3)创建CarController
- RunApp
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); }
}
- Car
public class Car{封装属性,提供get/set方法、toString方法、构造方法}
- CarController
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() {
Car car = new Car();
car.setId(718);
car.setName("保时捷");
car.setType("Cayman T");
car.setColor("红色");
car.setPrice(641000.0);
return car;
}
}
7.2处理请求参数
7.2.1简单参数传值
前提: servlet 是一种参数传递的机制 要求:所有的参数类型都是String 数据类型
说明: 数据类型的转化是框架帮助完成的!!!
public xxxx getUser(String username,Integer age)
7.2.2对象的方式接收参数
要求: 1.属性的名称必须与name属性名称一致.
2. 要求对象中必须有set/get方法 对象的属性都是private
public xxxx getUser(User user)
7.2.3同名提交问题
说明: 有时页面中会出现同名的提交问题 name属性都是一致的. 问 SpringMVC如何接收
原理: 当页面进行同名提交. 会将参数使用","号进行拼接 hobby = 吃1,吃2,吃3 String数据类型
mvc参数接收:
public xxxx getUser(String[] hobby){
//hobby 按照,号拆分为数组 之后循环遍历 取值操作......
}
...的本质 就是数组
public xxxx getUser(String... hobby){
//hobby 按照,号拆分为数组 之后循环遍历 取值操作......
}
7.2.4为对象的引用赋值
原则: SpringMVC中页面的name属性名称 不能重复, 除非同名提交问题
实际需求: 使用对象的引用解决 实际需求中的同名提交问题
<input name="name" type="text" value="二郎神"> user(name) 二郎神,啸天
<input name="dog.name" type="text" value="啸天"> dog(name) 二郎神,啸天
public class User{
private String name; //二郎神
private Dog dog; //dog对象
}
public class Dog{
private String name; //啸天
}
public xxxx getUser(User user){
}
7.2.5restFul风格
7.2.5.1
get请求案例: http://localhost:8080/getUser?id=100
restFul: 可以简化get请求的结构 简化key 使用/进行分隔,请求路径中不能有动词,要求restFul的请求是无状态的.
http://localhost:8080/user/100/tom
参数接收:
@RequestMapping("/user/{id}/{name}")
public xxx getUser(@Pathvariable Integer id,@Pathvariable String name){
}
//要求: {属性名称} 必须与对象的属性名称一致 get/set方法支持
@RequestMapping("/getUser/{id}/{name}")
public xxx getUser(User user){
}
请求类型与业务逻辑的关系:
请求路径: http://localhost:8080/user/100/tom type=“put”
RestFul中要求: 通过请求的类型控制业务逻辑的执行.
1.Get 查询操作
2.Post 登录/注册时使用(增)
3.Put 修改操作
4.Delete 删除操作
@GetMapping("/user/{id}/{name}")
public xxx getUser(@Pathvariable Integer id,@Pathvariable String name){
}
@PutMapping("/user/{id}/{name}")
public xxx getUser(User user){
}
7.2.5.2什么是restFul?
1.restFul其实可以简化之前的get请求的类型,将参数使用/的方式进行分隔,减少了url参数的传递的字节信息
2.restFul规定,可以通过一个url请求的地址,通过不同的请求的类型,控制业务逻辑. restFul中 要求路径中不能出现动词
8.SpringMVC常用的注解
@Controller 标识是一个Controller,Spring包扫描创建实例
@RequestMapping 请求后的映射路径
@PathVariable 标识接收单个参数
@ResponseBody 返回对象利用jackson工具类转换为json字符串
@RequestParam 参数名和请求参数名称不同时使用,可以设置默认值
9.MVC与SSM的关系