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

十四:java web(6)-- Spring Spring MVC

目录

Spring MVC

1.1 Spring MVC 概述

1.1.1 什么是 MVC 模式

1.1.2 Spring MVC 工作原理

1.2 Spring MVC 核心组件

1.2.1 DispatcherServlet

1.2.2 控制器(Controller)

1.2.3 请求映射(@RequestMapping)

1.2.4 视图解析器(View Resolver)

在 Spring MVC 中,视图层的处理已经不再是重点,因为现在大多数项目采用了前后端分离的架构。即使使用 JSP,也往往通过 Ajax 请求进行数据交互,视图层的渲染和控制并不需要过多关注,重点是如何通过注解(如 @Controller, @RequestMapping, @ResponseBody 等)来处理请求和响应。例如,使用 Ajax 请求时,前端发送一个 JSON 数据,后端通过 @ResponseBody 注解将数据返回给前端,而视图部分则通过 JavaScript 动态更新,不再依赖传统的 JSP 渲染。

1.3 RESTful API 开发

1.3.1 构建 RESTful 控制器

1.3.2 返回 JSON 数据(@RestController)

1.3.3 RESTful API 的常见返回格式

  1.4 常用注解: 


Spring MVC

  • 1.1 Spring MVC 概述

    • Spring MVC(Model-View-Controller)是 Spring 框架的一部分,提供了基于请求的 Web 应用程序开发框架。它通过分层架构帮助开发者将应用程序的关注点分离,使得应用更易于管理、扩展和测试。
      • 1.1.1 什么是 MVC 模式

        • MVC 模式是一种软件架构设计模式,它将应用程序的业务逻辑、用户界面和输入控制分离开来。MVC 模式的主要目的是为了提高代码的可维护性、可扩展性和可测试性。具体来说,MVC 模式由以下三个部分组成:

          • Model(模型):表示应用程序的数据和业务逻辑。模型层通常负责数据的持久化操作(例如与数据库的交互)和业务逻辑的处理。

          • View(视图):负责展示模型数据,并且通常会响应用户输入。视图层主要包括界面显示部分,如 HTML 页面、JSP 页面、Thymeleaf 模板等。

          • Controller(控制器):处理用户请求,调用业务逻辑并返回相应的视图。控制器作为调度器,协调模型和视图之间的交互。用户输入通过控制器转发到相应的服务层或模型层,并选择合适的视图呈现给用户。

        • MVC 的优势:

          • 分离关注点,简化了代码的维护。

          • 增强了代码的重用性,视图可以改变而不影响模型和控制器。

          • 业务逻辑与界面解耦,提高了应用程序的灵活性。

      • 1.1.2 Spring MVC 工作原理

        • 请求到达 DispatcherServlet:客户端的请求首先会被 DispatcherServlet 接收。DispatcherServlet 是一个前端控制器,它负责将请求转发到对应的处理逻辑。

        • 请求映射(HandlerMapping):DispatcherServlet 根据请求的 URL 调用 HandlerMapping 获取请求与相应的处理器(Controller)之间的映射关系。这个映射信息通常是由注解或 XML 配置来指定的。

        • 调用 Controller 方法:一旦找到匹配的控制器(Controller)及其方法,DispatcherServlet 会调用该控制器的方法来处理请求。Controller 通常会调用服务层(Service)来执行业务逻辑,可能会返回一个模型数据。

        • 返回模型数据:控制器方法返回的数据(通常是一个模型对象或一个视图名称)被传递给 ViewResolver(视图解析器)进行处理。

        • 视图渲染:ViewResolver 会根据返回的视图名称找到对应的视图(如 JSP、HTML、Thymeleaf 等),并将模型数据渲染到视图中,生成最终的 HTML 内容。

        • 响应返回给客户端:最后,渲染后的视图会返回给客户端,完成一次完整的请求-响应周期。

  • 1.2 Spring MVC 核心组件

    • 1.2.1 DispatcherServlet

      • DispatcherServlet 是 Spring MVC 的前端控制器(Front Controller),它是整个 Web 应用的核心组件之一。所有的请求都首先通过 DispatcherServlet,然后由它来分发和处理请求。具体来说,DispatcherServlet 主要负责以下几个方面:

        • 请求接收:当用户发起一个 HTTP 请求时,该请求会首先到达 DispatcherServlet

        • 请求转发DispatcherServlet 根据请求的 URL,使用 HandlerMapping 查找并调用合适的 Controller 来处理请求。

        • DispatcherServlet 是由 Web 容器(如 Tomcat)启动的,它在应用的 web.xml 或 Spring Boot 的配置文件中配置。

        • 返回视图:处理完请求后,DispatcherServlet 会使用 ViewResolver 解析视图并将结果返回给用户。

    • 1.2.2 控制器(Controller)

      • 控制器是 Spring MVC 中负责处理用户请求的组件。它的主要功能是接收来自 DispatcherServlet 转发的请求,执行具体的业务逻辑,并返回数据或视图。

        在 Spring MVC 中,控制器通常是用 @Controller@RestController 注解标记的类,@RequestMapping 注解用于将 HTTP 请求映射到具体的控制器方法。

      • @Controller 注解的类是一个普通的控制器,返回视图模型。

      • @RestController 是一个特殊的控制器,它默认将返回的对象转换为 JSON 或 XML 格式,通常用于构建 RESTful 风格的 Web 服务。

      • @Controller
        public class UserController {@RequestMapping("/user")public String getUser(Model model) {User user = userService.getUser();model.addAttribute("user", user);return "userView";  // 返回视图的名称}
        }
        
    • 1.2.3 请求映射(@RequestMapping)

      • @RequestMapping 是用于映射 HTTP 请求到控制器方法的注解。通过这个注解,开发者可以将不同的 URL 映射到不同的控制器方法上,并且可以指定请求类型(如 GET、POST 等)以及其他参数(如请求头、请求参数等)。

        @RequestMapping 可以用于类级别和方法级别。类级别的 @RequestMapping 用于指定该类中的所有请求路径的公共部分,方法级别的 @RequestMapping 用于指定具体的 URL 路径和请求方式。

        @RequestMapping 示例

      • @Controller
        @RequestMapping("/user")  // 类级别的请求映射
        public class UserController {@RequestMapping("/info")  // 方法级别的请求映射public String getUserInfo() {return "userInfo";  // 返回视图}@RequestMapping("/details")  // 方法级别的请求映射public String getUserDetails() {return "userDetails";  // 返回视图}
        }
        

        常见的 @RequestMapping 变体

        • @GetMapping:用于处理 HTTP GET 请求。

        • @PostMapping:用于处理 HTTP POST 请求。

        • @PutMapping:用于处理 HTTP PUT 请求。

        • @DeleteMapping:用于处理 HTTP DELETE 请求。

        • @RestController
          @RequestMapping("/api/users")
          public class UserRestController {@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userService.getUserById(id);  // 返回 JSON 格式的用户信息}
          }
    • 1.2.4 视图解析器(View Resolver)

      • 视图解析器(ViewResolver)是 Spring MVC 中的一个重要组件,它负责将控制器返回的视图名称解析为实际的视图对象(如 JSP 页面、HTML 页面、PDF 文件等),并将模型数据填充到视图中,最终渲染并返回给客户端。

        Spring MVC 提供了多种类型的视图解析器,最常见的是 InternalResourceViewResolver,它用于解析 JSP 视图。视图解析器的配置可以指定前缀和后缀,帮助确定视图文件的位置。

        ViewResolver 配置示例

      • <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" />
        </bean>
        
  • 在 Spring MVC 中,视图层的处理已经不再是重点,因为现在大多数项目采用了前后端分离的架构。即使使用 JSP,也往往通过 Ajax 请求进行数据交互,视图层的渲染和控制并不需要过多关注,重点是如何通过注解(如 @Controller, @RequestMapping, @ResponseBody 等)来处理请求和响应。例如,使用 Ajax 请求时,前端发送一个 JSON 数据,后端通过 @ResponseBody 注解将数据返回给前端,而视图部分则通过 JavaScript 动态更新,不再依赖传统的 JSP 渲染。

  • 1.3 RESTful API 开发

    •         RESTful API 是一种基于 REST (Representational State Transfer) 架构风格的 API 设计风格,它通过 HTTP 协议的标准方法(GET、POST、PUT、DELETE)进行操作。Spring MVC 提供了强大的支持来开发 RESTful API,通常通过 @RestController 注解来简化 API 开发。
    • 1.3.1 构建 RESTful 控制器

      • RESTful 控制器的设计遵循 HTTP 协议的约定,使用标准的 HTTP 方法来处理不同的操作。

        常见的 RESTful API 操作:

        • GET:获取资源(数据)。

        • POST:创建资源。

        • PUT:更新资源。

        • DELETE:删除资源。

      • @RestController
        @RequestMapping("/api/users")
        public class UserRestController {@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);if (user != null) {return ResponseEntity.ok(user);} else {return ResponseEntity.status(HttpStatus.NOT_FOUND).build();}}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody @Valid User user) {User savedUser = userService.save(user);return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);}@PutMapping("/{id}")public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {User existingUser = userService.getUserById(id);if (existingUser != null) {user.setId(id);User updatedUser = userService.save(user);return ResponseEntity.ok(updatedUser);} else {return ResponseEntity.status(HttpStatus.NOT_FOUND).build();}}@DeleteMapping("/{id}")public ResponseEntity<Void> deleteUser(@PathVariable Long id) {if (userService.exists(id)) {userService.delete(id);return ResponseEntity.noContent().build();} else {return ResponseEntity.status(HttpStatus.NOT_FOUND).build();}}
        }
        
      • @RestController:该注解标记的类用于处理 RESTful 请求,默认返回 JSON 格式的数据。

      • @GetMapping@PostMapping@PutMapping@DeleteMapping:分别用于处理 GET、POST、PUT 和 DELETE 请求。

      • @PathVariable:用于从 URL 中提取路径变量。

      • @RequestBody:用于从请求体中提取数据并绑定到 Java 对象。

    • 1.3.2 返回 JSON 数据(@RestController)

      • @RestController@Controller@ResponseBody 的组合注解,用于将方法返回的对象自动转化为 JSON 格式并返回。

      • @RestController
        @RequestMapping("/api/products")
        public class ProductRestController {@GetMapping("/{id}")public Product getProduct(@PathVariable Long id) {// 假设通过 id 获取产品信息return productService.getProductById(id);}@PostMappingpublic Product createProduct(@RequestBody Product product) {return productService.saveProduct(product);}
        }
        

        • @GetMapping("/{id}"):通过 GET 请求获取资源。

        • @PostMapping:通过 POST 请求创建新资源。

        • @RequestBody:将请求体中的 JSON 数据自动绑定到 Product 对象。

        • 返回的 Product 对象会被自动转化为 JSON 格式并返回给客户端。

    • 1.3.3 RESTful API 的常见返回格式

      • {"id": 1,"name": "Product A","price": 100.0
        }
        

        通常 RESTful API 会返回一个标准化的响应格式,以便客户端处理。例如,可以包装响应数据和状态码:

      • public class ApiResponse<T> {private String status;private T data;private String message;// Getter 和 Setter
        }
        

           

  •   1.4 常用注解: 

    • 常用控制器注解 
      • @Controller:用于标记一个类为 Spring MVC 的控制器类,表示该类将处理 Web 请求。
      • @RestController:@Controller@ResponseBody 的组合注解,表示该类的所有方法都会返回 JSON 或其他格式的数据,而不是视图。
      • @RequestMapping:用于定义请求的映射,支持多种 HTTP 方法(GET、POST、PUT、DELETE 等)。可以用于类或方法级别,类级别的 @RequestMapping 会作为方法级别的基础路径。
      • @GetMapping:用于处理 HTTP GET 请求。是 @RequestMapping 的快捷方式,专门用于 GET 请求。
      • @PostMapping:用于处理 HTTP POST 请求。是 @RequestMapping 的快捷方式,专门用于 POST 请求。
      • @PutMapping:用于处理 HTTP PUT 请求。是 @RequestMapping 的快捷方式,专门用于 PUT 请求。
      • @DeleteMapping:用于处理 HTTP DELETE 请求。是 @RequestMapping 的快捷方式,专门用于 DELETE 请求。
      • @PatchMapping:用于处理 HTTP PATCH 请求。是 @RequestMapping 的快捷方式,专门用于 PATCH 请求。
    • 请求参数相关注解 
      • @RequestParam:用于从请求的查询参数、表单参数或 URL 中提取参数。
      • @PathVariable:用于从 URL 路径中提取变量,常用于 RESTful 风格的 API 中。
      • @RequestBody:用于将 HTTP 请求的内容(通常是 JSON 数据)绑定到方法的参数上。常用于 POST、PUT 和 PATCH 请求中。
      • @RequestHeader:用于获取 HTTP 请求头中的参数。
      • @CookieValue:用于获取请求中的 Cookie 值。
    • 响应相关注解  
      • @ResponseBody:用于将控制器方法的返回值直接写入 HTTP 响应体,通常用于返回 JSON、XML 或其他格式的数据。
      • @ResponseStatus:用于指定方法执行完成后返回的 HTTP 状态码,可以直接将状态码应用于方法。
      • @ExceptionHandler:用于在控制器中处理异常。当方法抛出异常时,Spring MVC 会调用带有该注解的方法来处理异常。

                

 

相关文章:

十四:java web(6)-- Spring Spring MVC

目录 Spring MVC 1.1 Spring MVC 概述 1.1.1 什么是 MVC 模式 1.1.2 Spring MVC 工作原理 1.2 Spring MVC 核心组件 1.2.1 DispatcherServlet 1.2.2 控制器&#xff08;Controller&#xff09; 1.2.3 请求映射&#xff08;RequestMapping&#xff09; 1.2.4 视图解析器…...

Java代码实现策略模式处理支付付款业务

1.需求:因为付款功能集成的第三方支付SDK越来越来多不好维护,改用策略模式实现,来代替代码中多余的if else 判断。 2.什么是策略模式? 策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的行为。该模式将不同的算法封装成独立的策略类,并使这些…...

unity3d————四元数概念

一、定义与表示 四元数是由一个实数部分和三个虚数部分组成&#xff0c;通常表示为q w xi yj zk&#xff0c;其中w是实数&#xff0c;x、y、z是实数系数&#xff0c;i、j、k是虚数单位&#xff0c;满足以下关系&#xff1a; i j k -1ij k&#xff0c;ji -kjk i&…...

spring相关的面试题

Spring 框架是 Java 开发中最常用的框架之一&#xff0c;因此在面试中经常会被问到与 Spring 相关的问题。以下是一些常见的 Spring 面试题及其答案。 基础概念 什么是 Spring 框架&#xff1f; Spring 框架是一个开源的 Java 平台&#xff0c;用于构建企业级应用程序。它提供…...

STM32外设之SPI的介绍

### STM32外设之SPI的介绍 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;主要用于EEPROM、FLASH、实时时钟、AD转换器等外设的通信。SPI通信只需要四根线&#xff0c;节约了芯片的管脚&#x…...

二十三、Mysql8.0高可用集群架构实战

文章目录 一、MySQL InnoDB Cluster1、基本概述2、集群架构3、搭建一主两从InnoDB集群3.1、 安装3个数据库实例3.2、安装mysqlrouter和安装mysqlshell3.2.1、安装mysql-router3.2.2、安装mysql-shell 3.3、InnoDB Cluster 初始化3.3.1、参数及权限配置预需求检测3.3.2、初始化I…...

docker file 精简规则

在编写 Dockerfile 时&#xff0c;精简规则不仅有助于减小镜像大小&#xff0c;还能提高构建速度和可维护性。以下是一些常见的精简 Dockerfile 规则&#xff1a; 1. 尽量合并 RUN 指令 每个 RUN 指令会产生一个新的镜像层&#xff0c;因此多个命令可以合并为一个 RUN 指令&a…...

前端加密方式详解与选择指南

在当今数字化时代&#xff0c;前端数据安全的重要性日益凸显。本文将深入探讨前端加密的多种方式&#xff0c;为你提供选择适合项目加密方式的实用策略&#xff0c;并分享一些实际案例及相应代码。 一、前端加密方式汇总 &#xff08;一&#xff09;HTTPS 加密 HTTPS 是在 H…...

【React】条件渲染——逻辑与运算符

条件渲染——逻辑与&&运算符 你会遇到的另一个常见的快捷表达式是 JavaScript 逻辑与&#xff08;&&&#xff09;运算符。在 React 组件里&#xff0c;通常用在当条件成立时&#xff0c;你想渲染一些 JSX&#xff0c;或者不做任何渲染。 function Item({ nam…...

MATLAB中eig函数用法

目录 语法 说明 示例 矩阵特征值 矩阵的特征值和特征向量 排序的特征值和特征向量 左特征向量 不可对角化&#xff08;亏损&#xff09;矩阵的特征值 广义特征值 病态矩阵使用 QZ 算法得出广义特征值 一个矩阵为奇异矩阵的广义特征值 eig函数的功能是求取矩阵特征值…...

Chrome(谷歌浏览器中文版)下载安装(Windows 11)

目录 Chrome_10_30工具下载安装 Chrome_10_30 工具 系统&#xff1a;Windows 11 下载 官网&#xff1a;https://chrome.google-zh.com/&#xff0c;点击立即下载 下载完成&#xff08;已经下过一遍所以点了取消&#xff09; 安装 解压&#xff0c;打开安装包 点击下一步…...

Linux 配置JDK

文章目录 一、下载Oracle-JDK1.1、如何正确的下载JDK 二、配置JDK环境变量2.1 环境变量配置2.1.1、修改vim /etc/profile 添加jdk的路径 一、下载Oracle-JDK 1.1、如何正确的下载JDK 首先我要安装的是oracle-jdk&#xff0c;这个时候什么地方都不要去&#xff0c;就去oracle的…...

目前主流的人工智能学习框架有哪些?

随着人工智能&#xff08;AI&#xff09;技术的蓬勃发展&#xff0c;越来越多的AI学习框架相继推出&#xff0c;成为开发者、研究人员和企业构建机器学习&#xff08;ML&#xff09;和深度学习&#xff08;DL&#xff09;模型的首选工具。AI学习框架不仅提供了丰富的工具库和函…...

100种算法【Python版】第57篇——贝叶斯优化算法

本文目录 1 算法说明2 贝叶斯优化的步骤3 算法应用1:目标函数最大值4 算法应用2:确定最佳试验参数1 算法说明 贝叶斯优化是一种旨在优化黑箱目标函数的策略,通常适用于评估代价高昂或时间消耗长的函数。它利用贝叶斯统计方法来构建目标函数的概率模型,进而指导下一步的采样…...

在Ubuntu 上实现 JAR 包的自启动

在 Ubuntu 上实现 JAR 包的自启动&#xff0c;可以通过以下几种方法&#xff1a; 方法一&#xff1a;使用 systemd 创建一个服务文件&#xff1a; 在 /etc/systemd/system/ 目录下创建一个新的服务文件&#xff0c;例如 myapp.service&#xff1a; sudo nano /etc/systemd/sys…...

【智能算法应用】哈里斯鹰算法优化二维栅格路径规划问题

摘要 本文研究了基于哈里斯鹰优化算法&#xff08;Harris Hawks Optimization, HHO&#xff09;的二维栅格路径规划方法。HHO算法模拟哈里斯鹰的猎食行为&#xff0c;通过迭代搜索过程找到从起点到终点的最优路径&#xff0c;避开栅格中的障碍物。实验结果表明&#xff0c;HHO…...

单品年销10亿!看麻辣王子是如何布局软文营销为品牌赋能的?

说到辣条&#xff0c;除了大家熟知的卫龙之外&#xff0c;还有一个不得不提的品牌就是——麻辣王子。 作为来自辣条发源地湖南平江的老牌辣条企业&#xff0c;麻辣王子近几年通过打造品牌&#xff0c;积极破圈&#xff0c;2023年凭借一款单品狂揽超10亿年销售额&#xff0c;稳…...

【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 062 &#xff0c;文末自助获取源码 \color{red}{T062&#xff0c;文末自助获取源码} T062&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…...

C++:模拟实现STL的string

目录 一.实现string类 1.string的构造及析构 2.string类的遍历 3.string类的插入和删除 4.string类的空间处理 5.string类的查找 6.string类的输出和输入 7.string类的常用判断 二.整体代码 1.string.h 2.string.cpp 一.实现string类 在前一节中我们了解了STL中stri…...

【Python TensorFlow】入门到精通

TensorFlow 是一个开源的机器学习框架&#xff0c;由 Google 开发&#xff0c;广泛应用于机器学习和深度学习领域。本篇将详细介绍 TensorFlow 的基础知识&#xff0c;并通过一系列示例来帮助读者从入门到精通 TensorFlow 的使用。 1. TensorFlow 简介 1.1 什么是 TensorFlow…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...