传统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.pswp.cn/diannao/86633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS开发node包并发布流程

开发一个可发布到 npm 的 JavaScript 插件&#xff0c;需要遵循标准的开发、测试、打包和发布流程。以下是详细步骤指南&#xff1a; 1. 初始化项目 创建项目目录并初始化 package.json mkdir my-js-plugin cd my-js-plugin npm init -y手动修改 package.json&#xff0c;确保…

对比学习(Contrastive Learning)方法详解

对比学习&#xff08;Contrastive Learning&#xff09;方法详解 对比学习&#xff08;Contrastive Learning&#xff09;是一种强大的自监督或弱监督表示学习方法&#xff0c;其核心思想是学习一个嵌入空间&#xff0c;在这个空间中&#xff0c;相似的样本&#xff08;“正样…

1.6 http模块nodejs 对比 go

我们以go语言 原生实现 和浏览器交互.到现在学习 nodejs http模块. nodejs 对于请求分发,也需要我们自己处理. 我们应该也对 http 服务是建立在 tcp协议基础上.有更深入的体会了吧. 对于我们之后 学习 java web容器. 能有更深入的认知. 请求分发 请求分发是指 Web 框架或服务器…

护照阅读器在景区的应用

护照阅读器在景区的应用可以显著提升游客管理效率、增强安全性并优化游客体验。以下是其主要应用场景、优势及实施建议&#xff1a; 一、核心应用场景 快速入园核验 自动身份识别&#xff1a;通过扫描护照芯片&#xff08;MRZ码或NFC读取&#xff09;&#xff0c;1-3秒完成身份…

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…

什么是遥测数据?

遥测数据定义 遥测数据提供了关于系统性能的重要洞察&#xff0c;对主动解决问题和做出明智决策至关重要。要实现这一点&#xff0c;不能只依赖原始数据 —— 你需要实时的洞察&#xff0c;而这正是遥测数据提供的。 遥测是从远程来源&#xff08;如服务器、应用程序和监控设…

【JavaAPI搜索引擎】项目测试报告

JavaAPI搜索引擎测试报告 项目背景与项目介绍项目功能自动化测试单元测试测试ansj分词器测试能否获取到正确的URL测试能否正确解析文件中的正文 测试计划界面测试测试1 页面布局是否合理美观&#xff0c;元素是否正确显示测试2 测试是否可以正常显示出搜索结果测试3 点击搜索结…

如何选择合适的IP轮换周期

选择合适的IP轮换周期需综合业务目标、目标平台风控规则、IP类型与质量等多维度因素&#xff0c;以下是系统化决策框架及实操建议&#xff1a; &#x1f504; 一、核心决策要素 业务场景类型 高频操作型&#xff08;如数据采集、广告点击&#xff09;&#xff1a; 轮换周期短&a…

GO Goroutine 与并发模型面试题及参考答案

目录 什么是 Goroutine,它与线程有何区别? 如何创建一个 Goroutine?有哪些方式? Goroutine 执行函数时传递参数应注意什么问题? 使用 Goroutine 时如何确保主线程不会提前退出? 多个 Goroutine 写共享变量时会出现什么问题?如何解决? 如何用 sync.WaitGroup 管理 …

Leetcode-11 2 的幂

Leetcode-11 2 的幂&#xff08;简单&#xff09; 题目描述思路分析通过代码&#xff08;python&#xff09; 题目描述 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数…

【Java】【力扣】121.买卖股票的最佳时机

思路 所以后续的每次都是在&#xff1a;1-判断是否更新最低点 2-如果不需要更新最低点 则计算差值 代码 class Solution { public int maxProfit(int[] prices) { int minprices[0]; int max0; for (int i 1; i < prices.length; i) { //假设0就是最低点 // 判…

微服务架构下大型商城系统的事务一致性攻坚:Saga、TCC与本地消息表的实战解析

当用户在商城完成支付却看到"订单异常"提示时&#xff0c;背后往往是分布式事务一致性缺失导致的业务裂缝。在微服务拆分的商城系统中&#xff0c;如何保障跨服务的交易原子性&#xff0c;成为架构设计的生死线。 一、商城分布式事务的典型场景与痛点 在某家电品牌商…

深入理解 Vue.observable:轻量级响应式状态管理利器

目录 引言 一、什么是 Vue.observable&#xff1f; 二、为什么需要 Vue.observable&#xff1f;解决什么问题&#xff1f; 三、核心原理&#xff1a;响应式系统如何工作 四、如何使用 Vue.observable 功能说明 技术要点 五、关键注意事项与最佳实践 六、实际应用案例 …

JS设计模式(5): 发布订阅模式

解锁JavaScript发布订阅模式&#xff1a;让代码沟通更优雅 在JavaScript的世界里&#xff0c;我们常常会遇到这样的场景&#xff1a;多个模块之间需要相互通信&#xff0c;但是又不想让它们产生过于紧密的耦合。这时候&#xff0c;发布订阅模式就像一位优雅的信使&#xff0c;…

【电路物联网】SDN架构与工作原理介绍

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

vscode 保存 js 时会自动格式化,取消设置也不好使

vscode 里的设置搜索 Editor: Format On Save 取消勾选 卸载 Prettier - Code formatter 这个插件后好使了&#xff0c;本来以为是插件的问题&#xff0c;后来发现是工作区设置的问题。 因为我是用 GitHub 下载的工程打开后&#xff0c; vscode 认为是工作区了, 因为 .vscode…

xcode中project.pbxproj点开为空白问题

由于需要修改signing里面的配置&#xff0c;点击了project.pbxproj。但是发现一片空白&#xff0c;如图 以为是配置文件损坏&#xff0c;邮件show in Finder看了一通后没看出什么所以然。并且发现entitlement文件、list文件全都是点开为白&#xff0c;并且没有任何保存 最后发…

JUC并发编程(四)常见模式

目录 一 同步与协调模式 1 保护性暂停模式 2 顺序控制模式 3 生产者消费者模式 4 Balking模式&#xff08;犹豫模式&#xff09; 二 线程管理/生命周期模式 1 两阶段终止模式 一 同步与协调模式 1 保护性暂停模式 一个线程需要等待另一个线程提供特定条件&#xff08;通常是…

Vue 数据代理机制对属性名的要求

Vue 数据代理机制对属性名的要求 在 Vue 的数据代理机制中,属性名需遵循以下关键规则: 1. 禁止以 _ 或 $ 开头 ⚠️ Vue 会跳过代理以 _ 或 $ 开头的属性原因:这些前缀被 Vue 保留用于内部属性(如 _data, _uid, $refs, $el 等)示例:data() {return {count: 1, // ✅…

pdf.js在iOS移动端分页加载优化方案(ios移动端反复刷新加载问题)

背景与问题 在iOS移动端加载大型PDF文件时&#xff0c;由于设备内存限制&#xff0c;经常遇到以下问题&#xff1a; 内存不足导致页面崩溃大文件加载缓慢页面反复重新加载 ##解决方案 采用PDF.js的分页加载策略&#xff0c;实现按需加载当前可视页面及相邻页面&#xff0c;…