一: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編碼格式的數據,將請求綁定到實體上。
每個綁定註解還可以設置默認值,是否必須需要參數。