一:SpringMVC工作流程
先来看一下流程图
SpringMVC的组件:
- Dispatch Servlet:前端控制器
- Handler Mapping:映射处理器
- Handler Adapter:适配处理器
- Controller:控制器
- View Resolver:视图解析器
SpringMVC的工作流程
- 请求先到达DispathcherServlet,DispathcherServlet会根据映射去Handler Mapping查询相应的Controller地址并将请求发送。
- Controller接受到请求后,经过一系列的逻辑处理,返回视图和模型给DispathcherServlet
- DispathcherServlet将视图交给视图解析器去渲染输出
二:简单的Demo
现在项目都是前后端分离,返回给前端的数据都是json格式。需要在类上添加@ResponseBody。
@ResponseBody:将方法的返回值以json或者文本格式写入Response的实体内容。
最简单的SpringMVC demo。访问路径为8080端口,url为"/"
@Controller // 这里注解可以用@RestController注解替代
@ResponseBody // @RestController = @ResponseBody + @Controller
public class UserController {
@RequestMapping
public String queryUserList(){
return "哈哈";
}
}
@Controller :将这个类标记,让Spring启动的时候注册为bean。这个注解和@component,@service,@Repository在本质上没有区别,但是在代表的功能不一样。
注解 | 含义 |
---|---|
@component | 最普通的组件,可以被注入到spring容器进行管理 |
@service | 作用于业务逻辑层 |
@Controller | 作用于表现层(spring-mvc的注解) |
@Repository | 作用于持久层 |
@RequestMapping:标注类或者方法的请求路径。
三:请求的处理
请求的方式分为三种:假设接口为/user
- /user/参数,路径变量
- /user?name=18&age=10,查询参数
- /user,在请求的内容实体中,一般为json格式
pojo:
@Data
@AllArgsConstructor
public class User {
private String name;
private int age;
}
Controller:
@RestController
@RequestMapping("user")
public class UserController {
@GetMapping
public User queryUserList1(@RequestParam String name,@RequestParam int age){
User user = new User(name,age);
return user;
}
@GetMapping("{name}")
public User queryUserList2(@PathVariable("name") String name){
return new User(name,18);
}
@PostMapping
public User queryUserList3( @RequestBody User user){
return user;
}
}
- @RequestParam:将请求所携带的参数绑定到形式参数上
- @PathVariable:将路径中的参数绑定到形式参数上,通过占位符来锁定参数的位置
- @RequestBody:处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据,将请求绑定到实体上。
每个绑定注解还可以设置默认值,是否必须需要参数。