当前位置: 首页 > news >正文

传统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数据
http://www.dtcms.com/a/244794.html

相关文章:

  • 5G视频通话可以做营销吗
  • VBA即用型代码手册:Document 对象 Document Object
  • 10.Mkb、Mb 和 Mbps
  • 【完整源码+数据集+部署教程】安检爆炸物检测系统源码和数据集:改进yolo11-REPVGGOREPA
  • STM32实战:智能家居控制面板设计方案
  • sessionStorage.setItem
  • 将模型保存到kaggle中的model中
  • 【无标题】测试
  • day28 类的定义和方法
  • 【Java开发】Spring 事务开发完全指南:从入门到精通
  • ZYNQ学习记录FPGA(三)状态机
  • CBAM认证概述,CBAM认证的核心要素,CBAM认证的未来发展
  • 软件测试面试题总结【含答案】
  • 全球首个体重管理AI大模型“减单”发布,学AI大模型来近屿智能
  • 在Linux下使用vscode使用交叉编译工具链的gdb对core文件进行堆栈、变量查看
  • Spring Data MongoDB 技术指南
  • Spring核心框架完全指南 - 基础知识全解析
  • opencv vs2020正确的环境配置
  • Qt 动态插件系统QMetaObject::invokeMethod
  • 新闻类鸿蒙应用全链路运维指南:高并发场景下的稳定保障
  • Linux操作系统-性能优化
  • list类型
  • 亚远景-ASPICE在汽车软件全生命周期管理中的作用
  • AI Agent 的架构与技术体系分析
  • 在当系统未连接上wifi的时候,直接不显示wifi列表 ,这个判断导致?
  • 贪心选择 (Greedy Choice)
  • Vue2数组响应式问题:Object.defineProperty不能监听数组吗
  • 论文略读:RegMix: Data Mixture as Regression for Language Model Pre-training
  • 杉山将(Sugiyama Masa)《图解机器学习》
  • 2023蓝桥杯C/C++ B组国赛