传统模式没有实现前后端分离,服务器处理完业务后直接返回完整的HTML页面,每次操作都要刷新整个页面。类似下面的情况:
@Controller
public class UserController {
@RequestMapping("/addUser")
public String addUser() {
// 处理后返回JSP页面
return "user/add"; // 跳转到添加用户页面
}
@RequestMapping("/saveUser")
public String saveUser(User user) {
userService.save(user);
return "redirect:/userList"; // 重定向到用户列表页面
}
}
RESTful API模式下,服务器不会返回整个页面,前后端是分离的,对于作为后端的服务器来说只需要返回数据(通常是JSON格式的)。类似下面的情况:
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping // 获取所有用户
public List<User> getAllUsers() {
return userService.findAll();
}
@PostMapping // 创建新用户
public Result createUser(@RequestBody User user) {
userService.save(user);
return Result.success("用户创建成功");
}
@DeleteMapping("/{id}") // 删除用户
public Result deleteUser(@PathVariable Long id) {
userService.delete(id);
return Result.success("用户删除成功");
}
}
为什么我需要搞清楚这个呢,是由于学习Spring MVC的时候,Spring MVC的执行流程中的DispatcherServlet去解析Controller的返回值这个步骤困惑住了我,如果是RESTful API模式,其实就没有这个流程,如果是传统Web模式,就会又这个步骤。
下面是简化的Spring MVC在两种模式下的执行流程:
传统模式执行流程:
1. DispatcherServlet接收请求
2. HandlerMapping找到Controller
3. HandlerAdapter调用Controller方法
4. Controller返回ModelAndView(或字符串)
5. DispatcherServlet调用ViewResolver ← 这一步存在
6. ViewResolver解析视图名 → 物理视图
7. 渲染视图(填充数据)
8. 返回HTML页面
RESTful模式执行流程:
1. DispatcherServlet接收请求
2. HandlerMapping找到Controller
3. HandlerAdapter调用Controller方法
4. Controller返回数据对象
5. HttpMessageConverter序列化对象 ← 跳过视图解析
6. 直接返回JSON数据
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。