传统Web应用和RESTful API模式
传统Web应用和RESTful API
传统模式
传统模式没有实现前后端分离,服务器处理完业务后直接返回完整的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模式
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数据