SpringMVC详解

文章目录
    • 1 什么是MVC
      • 1.1 MVC设计思想
      • 1.2 Spring MVC
    • 2 SpringMVC快速入门
    • 3 SpringMVC处理请求
      • 3.1 请求分类及处理方式
        • 3.1.1 静态请求
        • 3.1.2 动态请求
      • 3.2 处理静态请求
        • 3.2.1 处理html文件请求
        • 3.2.2 处理图片等请求
      • 3.3 处理动态请求
        • 3.3.1 注解说明
        • 3.3.2 示例
      • 3.4 常见问题
    • 4 HTTP
      • 4.1 HTTP协议
      • 4.2 访问网页流程
      • 4.3 请求和响应
        • 4.3.1 HTTP请求 Request
        • 4.3.2 HTTP响应 Response
      • 4.4 URL
        • 4.4.1 定义
        • 4.4.2 URL组成
        • 4.4.3 注意事项
      • 4.5 请求方法
        • 4.5.1 GET请求
        • 4.5.2 POST请求
      • 4.6 传递数据方式
        • 4.6.1 GET请求
        • 4.6.2 POST请求
    • 5 服务端接收参数
      • 5.1 HttpServletRequest接收
      • 5.2 声明参数接收
      • 5.3 声明POJO类接收
    • 6 HttpClient测试
      • 6.1 HttpClient说明
    • 7 POJO
      • 7.1 定义
      • 7.2 entity实体类|DTO|VO

1 什么是MVC

1.1 MVC设计思想

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分。

  • M

    Model,模型层,负责业务逻辑判断,数据库存取

  • V

    View,视图层,负责界面展示,向用户呈现数据的方式(html页面、图片、文本等)

  • C

    Controller,控制器,负责接收用户请求,并根据请求调用相应的模型来处理业务逻辑

在这里插入图片描述

1.2 Spring MVC

在这里插入图片描述

SpringMVC是一种基于MVC(模型-视图-控制器)模式的Web框架,它是基于Spring框架的一个子项目。

它通过将请求分派给相应的控制器来处理Web请求,然后将处理结果发送回客户端。

处理流程如图:

在这里插入图片描述

  1. 客户端发送请求至前端控制器DispatcherServlet;
  2. DispatcherServlet收到请求后,调用处理器映射器HandlerMapping;
  3. HandlerMapping根据请求URL找到具体的Controller;
  4. 通过处理器适配器HandlerAdapter找到具体执行该方法的实现类;
  5. Controller处理请求,并返回ModelAndView;
  6. DispatcherServlet通过ViewReslover(视图解析器)确定负责显示数据的具体View;
  7. DispatcherServlet对View进行渲染视图(即将Model填充至视图组件中),并将完整的视图响应到客户端。

2 SpringMVC快速入门

  • 第1步:创建工程 _051MVC-BOOT01

    在这里插入图片描述

  • 第2步:选择 2.7.17 版本,并勾选 Spring Web 依赖项

    在这里插入图片描述

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  • 第3步:启动工程

  • 第4步:在resources/static目录下创建index.html

    <h1>
        工程首页
    </h1>
    
  • 第5步:Rebuild static

    在这里插入图片描述

3 SpringMVC处理请求

3.1 请求分类及处理方式
3.1.1 静态请求
  • 定义

    指请求的页面由服务器上预先准备好的静态web资源组成,如HTML、CSS、JS、IMG等,返回给客户端的信息内容是不变的。

  • 处理方式

    由服务器直接将请求的资源返回给客户端,服务器不处理任何逻辑,只是将预先准备好的资源返回给客户端。

    在这里插入图片描述

3.1.2 动态请求
  • 定义

    服务器会根据用户的请求动态生成内容,将数据返回到客户端显示页面内容。

  • 处理方式

    由服务器从数据库中获取数据,并进行相应的逻辑处理后将处理结果返回客户端。

    在这里插入图片描述

3.2 处理静态请求
3.2.1 处理html文件请求
  • 第1步:创建index.html(已经创建)浏览器输入地址测试

    http://localhost:8080/index.html

  • 第2步:浏览器显示工程首页

在这里插入图片描述

3.2.2 处理图片等请求
  • 第1步:复制任意一张图片到static下

  • 第2步:右键static目录,Rebuild static

  • 第3步:浏览器测试

    http://localhost:8080/liying.jpg

3.3 处理动态请求

通过在 controller 中定义对应的类及方法实现动态请求的业务逻辑处理。

3.3.1 注解说明
  • @Controller

    添加在类上;

    表示该类是一个控制器,负责处理用户的请求,并将处理结果生成响应返回给客户端。

  • @RequestMapping

    请求注解;

    添加在控制器类或控制器方法上;

    将HTTP请求映射到控制器中的方法,指定处理请求的路径

    • 控制器类上:为整个控制器指定一个基础路径
    • 控制器方法上:指定相对于基础路径的具体路径
  • @ResponseBody

    响应注解;

    添加在控制器方法上;

    可以使控制器方法通过返回值的方式将响应返回给客户端。

3.3.2 示例

处理用户查询订单的请求

  • 请求地址:http://localhost:8080/selectOrder
  • 返回响应:String “查询订单成功~~”

实现

  • 第1步: 工程目录下新建 controller.OrderController

    // @Controller:用于将一个类标识为SpringMVC中的控制器,负责处理用户的请求并将响应返回给客户端
    @Controller
    public class OrderController {
        // 1.请求注解
        @RequestMapping("/selectOrder")
        // 2.响应体注解,添加此注解后,可以通过返回值的方式响应给客户端数据
        @ResponseBody
        public String selectOrder(){
            return "查询订单成功~~";
        }
    }
    
  • 第2步:重启工程 后浏览器测试

    http://localhost:8080/selectOrder

3.4 常见问题
  • 工程已修改,但是浏览器刷新未出现效果
    • 工程static目录下文件修改后必须 Rebuild static
    • 浏览器有之前页面的缓存,Shift + F5 刷新页面
  • 404错误码代表找不到资源
    • 找不到静态资源

      • 检查请求的路径是否正确
      • 检查静态资源文件的存储位置是否在static里面
      • 选中static文件夹 ReBuild 重新编译再测试
    • 找不到动态资源

      • 检查请求的路径是否正确
      • 检查@Controller注解是否添加
      • 检查@RequestMapping注解里面的处理路径是否正确

4 HTTP

4.1 HTTP协议

超文本传输协议

HTTP协议是浏览器与服务器通讯的应用层协议,规定了浏览器与服务器之间的交互规则以及交互数据的格式信息等。

  • 用途 : 网页获取,数据的传输
  • 特点
    • 应用层协议,使用tcp进行数据传输;
    • 有丰富的请求类型;
    • 可以传输的数据类型众多.
4.2 访问网页流程
  1. 客户端(浏览器)通过tcp传输,发送http请求给服务端;
  2. 服务端接收到http请求后进行解析;
  3. 服务端处理请求内容,组织响应内容;
  4. 服务端将响应内容以http响应格式发送给浏览器;
  5. 浏览器接收到响应内容,解析展示.
4.3 请求和响应
4.3.1 HTTP请求 Request

浏览器给服务端发送的内容称为请求Request,一个请求包含三部分:请求行,请求头,请求体

  • 请求行 : 具体的请求类别和请求内容

    GET         /        HTTP/1.1
    请求类别   抽象路径     协议版本
    
    /**关于请求类别*/
    请求类别:每个请求类别表示向服务器端发请求做不同的操作
       GET : 获取服务器资源
       POST :新增服务器资源
       PUT : 更新服务器资源
       DELETE : 删除服务器资源
        
    /**关于抽象路径*/
    请求URL地址为:http://localhost:8080/
    请求行为:    GET / HTTP/1.1
    
    请求URL地址为:http://localhost:8080/v1/users/login
    请求行为:    GET /v1/users/login HTTP/1.1
    
    请求URL地址为:http://localhost:8080/v1/users/reg
                GET /v1/users/reg HTTP/1.1
    
  • 请求头:对请求的进一步解释和描述

    请求头是浏览器可以给服务端发送的一些附加信息,有的用来说明浏览器自身内容,有的用来告知服务端交互细节,有的告知服务端消息正文详情等。

    Host: localhost:8080
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    
  • 请求体: 请求参数或者提交内容

    请求体通常是用户上传的信息,比如:在页面输入的注册信息,上传的附件等内容。

    在这里插入图片描述

4.3.2 HTTP响应 Response

服务端给浏览器发送的内容称为响应Response,一个响应包含三部分:响应行,响应头,响应体。

  • 响应行

    HTTP/1.1     200       OK
    版本信息    响应码   附加信息
    响应码 : 
        1xx:保留
        2xx:成功,表示处理成功,并正常响应
        3xx:重定向,表示处理成功,但是需要浏览器进一步请求
        4xx:客户端错误,表示客户端请求错误导致服务端无法处理
        5xx:服务端错误,表示服务端处理请求过程出现了错误
    
  • 响应头

    响应头与请求中的消息头格式一致,表示的是服务端发送给客户端的附加信息。

    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 3546
         
    //Content-Length是用来告知浏览器响应正文的长度,单位是字节。
    

    Content-Type 是用来告知浏览器响应正文中的内容是什么类型的数据(图片,页面等等)不同的类型对应的值是不同,浏览器接收正文前会根据上述两个响应头来得知长度和类型从而读取出来做对应的处理以渲染给用户看。

    文件类型

    Content-Type对应的值

    html

    text/html

    css

    text/css

    js

    application/javascript

    png

    image/png

    gif

    image/gif

    jpg

    image/jpeg

  • 响应体

    响应的主体内容信息

    在这里插入图片描述

4.4 URL
4.4.1 定义

URL(Uniform Resource Locator)是互联网上 统一资源定位符 的简称,用于标识和定位互联网上资源的地址。在Web浏览器中,URL是用于访问网页的地址。

4.4.2 URL组成

http://localhost:8080/v1/users/loginusername=xxx&password=yyy

  • 协议(Protocol):指定访问资源的协议类型,常见的协议包括HTTP、HTTPS等。

  • 主机名(Hostname):指定要访问的服务器的主机名或域名。

  • 端口号(Port):指定服务器的端口号,不同的协议和应用程序使用不同的端口号。

  • 路径(Path):指定要访问的资源的路径,即文件或文件夹的路径。

  • 查询参数(Query Parameters):用于传递一些额外的信息给服务器,例如参数化的查询条件。

    查询参数和路径Path之间使用 ?分隔,多个查询参数之间使用 & 分隔。

在这里插入图片描述

4.4.3 注意事项
  • URL地址是区分大小写的,因此在输入时要注意大小写的一致性。

  • URL地址中不能包含非法字符,例如空格、特殊符号等。如果需要传递参数或附加信息,可以使用查询参数或POST请求等方式。

4.5 请求方法
4.5.1 GET请求

GET请求是HTTP协议中最常见的请求方式之一,它用于从服务器获取数据

GET请求将查询参数附加在URL之后,通过“”符号进行分隔。

  • 查询参数

    GET请求的参数通常以键值对的形式附加在URL之后。例如,以下URL中,“name=John&age=25”是两个查询参数,分别表示名字和年龄

    http://example.com/users?name=John&age=25
    
  • 注意事项

    • GET请求的参数是可见的,因此在URL中传递敏感信息时需谨慎。
    • GET请求的长度有限制,因为URL的长度有限制,因此当传递大量数据时,应考虑使用POST或其他方式。
  • 发送GET请求

    在浏览器中输入URL地址确认即可向服务端发送GET请求。

    http://localhost:8080/v1/users/login?username=xxx&password=xxx

4.5.2 POST请求

POST请求是另一种常见的HTTP请求方式,它用于向服务器提交数据。与GET请求不同,POST请求将数据放在请求体(Request Body)中,而不是URL中。

  • 请求体

POST请求的请求体中包含要提交的数据。这些数据可以是JSON、XML或其他格式。请求体中的数据通过Content-Type头部指定。

  • 请求示例

    POST /users HTTP/1.1  
    Host: example.com  
    Content-Type: application/json  
    Request Body: {"username": "john", "password": "secret"}
    
  • 使用POST请求的注意事项

    • POST请求的数据是私密的,不会显示在URL中,因此更适合传递敏感信息。

    • POST请求的长度没有限制,可以提交大量的数据。

  • 发送POST请求

    经常在 form 表单中发送。

    <form action="请求地址" method="post">
        <input type="text" name="username">
        <input type="text" name="password">
        <input type="submit" name="登录">
    </form>
    
4.6 传递数据方式

客户端向服务端传递数据的方式分为GET请求和POST请求两种方式。

4.6.1 GET请求

在查询参数中传递,比如:

http://localhost:8080/v1/users/login?username=xxx&password=xxx
4.6.2 POST请求

在请求体中传递,比如:

<form action="请求地址" method="post">
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="submit" name="登录">
</form>

5 服务端接收参数

5.1 HttpServletRequest接收
  • HttpServletRequest是Java Servlet规范中定义的一个接口,它提供了与HTTP请求相关的方法和属性。

  • 在Java Web应用程序中,当客户端发送HTTP请求时,容器(例如Tomcat)会创建一个HttpServletRequest对象,该对象包含了客户端请求的所有信息,如请求的URL、请求方法、请求头、请求参数等。

  • 在请求处理过程中,开发人员可以使用HttpServletRequest对象来获取客户端发送过来的请求参数。通过调用HttpServletRequest的方法,可以获取请求的参数名称、参数值以及参数的数量等信息。

以上述案例为准,客户端把用户名和密码信息传递给服务端,服务端接收传递过来的用户名和密码信息。

  • 第1步:controller.UserController 处理请求

    /**方式1:使用HttpServletRequest接收数据*/
    @RequestMapping("/v1/users/login")
    @ResponseBody
    public String login(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
    
        return username + ":" + password;
    }
    
  • 第2步:重启工程测试

5.2 声明参数接收

可以在处理请求的方法中通过 声明参数的方式 来接收客户端传递过来的数据。

应用分析

  • 第1步:controller.UserController处理登录请求

    /**方式2:通过声明参数的方式接收*/
    @RequestMapping("/v1/users/login")
    @ResponseBody
    // 好处:代码简洁,并且可以自动根据声明的类型进行转换
    public String login(String username, String password){
        return "username = " + username + ", password = " + password;
    }
    
  • 第2步:重启工程,执行测试脚本测试

5.3 声明POJO类接收

如果客户端传递数据过多,通过 HttpServletRequest 方式接收复用性较差,通过 声明参数接收 又很繁琐;所以可以将数据封装到 POJO类 中来接收。

操作步骤

  • 第1步:controller.UserController处理登录请求

    /**方式3:通过声明Pojo类接收*/
    @RequestMapping("/v1/users/login")
    @ResponseBody
    public String login(User user){
        return user.toString();
    }
    
  • 第2步:自定义pojo类,工程目录下创建entity.User

    public class User {
        // 客户端传递几个参数,此处就有几个属性
        private String username;
        private String password;
        
        // 省略 setter()  getter()  和 toString() 方法
    }
    
  • 第3步:重启工程后测试

6 HttpClient测试

6.1 HttpClient说明

使用SpringMVC中提供的 .http 后缀的文件来测试 Controller 层接口。

使用三个 # 号 作为不同测试方法的分隔符,也可以作为注释说明。

应用分析

  • 第1步:在test目录下创建 Directory :http

  • 第2步:创建 .http 后缀的文件进行测试:testUserController.http

    ### GET请求测试
    GET http://localhost:8080/v1/users/login?username=liying&password=123456
    Accept: application/json
    
    ### POST请求测试
    POST http://localhost:8080/v1/users/login
    Content-Type: application/x-www-form-urlencoded
    
    username=liying&password=123456
    
  • 第3步:执行对应的请求方法测试

    在这里插入图片描述

7 POJO

7.1 定义

Plain Ordinary Java Object:简单的Java对象;

是没有继承任何类或实现任何接口的简单 Java 对象,也不依赖于其他复杂的框架或技术;

POJO 对象通常包含了纯粹的数据和简单的业务逻辑,是一种用于简化 Java 应用程序开发的编程模型;

是entity实体类、VO(Value Object或View Object)视图对象、DTO(Data Transfer Object)数据传输对象 这3个对象的总称。

7.2 entity实体类|DTO|VO
  • entity实体类作用

    用来和数据库中的表字段一一对应的,比如UserEntity(id,username,password,nickname);

  • DTO作用

    用来接收客户端传递给服务器的数据的,比如:UserLoginDTO(username,password) 实现登录功能,客户端向服务器端传递数据;

  • VO作用

    用来处理服务器响应给客户端的数据的,比如:UserListVO(id,username,nickname) 登录成功后的列表页显示当前用户信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970552.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个让Stable Diffusion更稳定、更易用的Github开源项目

2023除了ChatGPT大火&#xff0c;Stable Diffusion同样也是非常火热&#xff0c;Stable Diffusion是一个Github开源项目&#xff0c;很多爱好者都会本地安装&#xff0c;但面对一些初学者来说&#xff0c;在安装、配置和使用过程中还是会经常出现很多问题&#xff0c;特别不了解…

Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力

文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型&#xff0c;以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火&#xff0c;越来越多的技术大佬们开始关注如…

[java] 常见的七大查找算法

目录 基本查找-重要 二分查找-重要 插值查找-重要 斐波那契查找 分块查找-重要 哈希查找 树表查找 基本查找-重要 也叫做顺序查找&#xff08;顺序查找适合于存储结构为数组或者链表&#xff09; 基本思想&#xff1a;顺序查找也称为线形查找&#xff0c;属于无序查找算…

开源、免费项目管理工具比较:2025最新整理30款

好用的开源、免费版项目管理系统有&#xff1a;1.Redmine&#xff1b;2. Taiga&#xff1b;3. OpenProject&#xff1b; 4.ProjectLibre&#xff1b; 5.GanttProject&#xff1b; 6.Tuleap&#xff1b; 7.Trac&#xff1b;8. Phabricator&#xff1b; 9.Notion&#xff1b; 10.…

Linux-C/C++《七、字符串处理》(字符串输入/输出、C 库中提供的字符串处理函数、正则表达式等)

字符串处理在几乎所有的编程语言中都是一个绕不开的话题&#xff0c;在一些高级语言当中&#xff0c;对字符串的处理支 持度更是完善&#xff0c;譬如 C、 C# 、 Python 等。若在 C 语言中想要对字符串进行相关的处理&#xff0c;譬如将两个字符串进行拼接、字符串查找、两个…

鸿蒙中,UIAbility组件启动模式(3种分别是Singleton(单实例模式)Multiton(多实例模式)Specified(指定实例模式))

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景&#xff0c;系统提供了三种启动模式&#xff1a; Singleton&#xff08;单实例模式&#xff09; Multiton&#xff08;多实例模式&#xff09; Specified&#xff08;指定实例模式&#xf…

Linux第107步_Linux之PCF8563实验

使用PCF8563代替内核的RTC&#xff0c;可以降低功耗&#xff0c;提高时间的精度。同时有助于进一步熟悉I2C驱动的编写。 1、了解rtc_time64_to_tm()和rtc_tm_to_time64() 打开“drivers/rtc/lib.c” /* * rtc_time64_to_tm - Converts time64_t to rtc_time. * Convert seco…

上海正控ZK880 变频器基本操作

1&#xff0c;变频器参数设置&#xff1a; F0-02设置成2&#xff1b;&#xff08;通过modbus指令进行开机和关机的动作&#xff1b;&#xff09; Fd-00设置成5005&#xff1b; Fd-01设置成0&#xff1b; Fd-02设置成1&#xff1b; Fd-03设置成2ms&#xff1b; 2.硬件连接&a…

测试环境管理的最佳实践:从搭建到维护的实战指南

引言 在电商公司的一次“双十一”大促前,测试团队发现预发布环境的订单支付接口频繁超时。经过排查,发现测试环境的Redis版本与生产环境不一致,导致缓存策略失效。这一事件直接导致上线延迟48小时,损失数百万营收。测试环境的稳定性直接决定了软件交付的质量与效率。本文将…

利用亚马逊云科技RDS for SQL Server配置向量数据存储

生成式人工智能&#xff08;AI&#xff09;正迎来又一个快速发展期&#xff0c;引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…

YOLOV8的学习记录(一) 环境配置和安装

YOLO8的官网地址&#xff1a;YOLOv8 - Ultralytics YOLO Docs • YOLOV8的环境要求&#xff1a; YOLO集成在ultralytics库中&#xff0c;ultralytics库的环境要求&#xff1a; Python>3.7 PyTorch>1.10.0 在按照所需python版本新建好的conda环境中安装好torch&#x…

如何在 IntelliJ IDEA 中使用 Bito AI 插件

如何在 IntelliJ IDEA 中使用 Bito AI 插件 Bito: On-Demand AI Code Reviews Bito AI 插件是一个智能开发工具&#xff0c;能够帮助开发者提升编码效率&#xff0c;自动化生成代码、注释、单元测试等。本文将详细介绍 Bito AI 插件在 IntelliJ IDEA 中的使用方法&#xff0c…

如何升级Python版本。以下是详细的步骤和注意事项:检查当前Python版本:在命令行或终端中输入以下命令来查看当前安装的Python版本: bash复制代

升级Python版本。以下是详细的步骤和注意事项&#xff1a; 检查当前Python版本&#xff1a;在命令行或终端中输入以下命令来查看当前安装的Python版本&#xff1a; bash复制代码 python --version 这将显示你当前使用的Python版本。 下载最新版本的Python&#xff1a;访问Py…

SpringBoot(7)-Swagger

目录 一、是什么 二、SpringBoot集成Swagger 三、配置Swagger 3.1 配置文档信息 3.2 配置扫描接口 3.3 配置Swagger开关 3.4 配置API分组 3.5 实体配置 四、常用注解 五、总结 一、是什么 是一款API框架&#xff0c;API文档和API定义同步更新&#xff0c;可以在线测…

C++效率掌握之STL库:string底层剖析

文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…

SCI学术论文图片怎么免费绘制:drawio,gitmind

SCI学术论文图片怎么免费绘制 目录 SCI学术论文图片怎么免费绘制overleaf怎么图片不清晰怎么办SCI学术论文图片怎么导出pdfdrawiogitmind**1. 使用在线工具****Lucidchart****2. Draw.io****3. ProcessOn****4. 使用桌面工具****Dia****5. 使用Markdown工具(如Typora)**如果你…

对于RocksDB和LSM Tree的一些理解,以及TiDB架构初识

LSM Tree的读写过程 HBase、LevelDB&#xff0c;rocksDB&#xff08;是一个引擎&#xff09;底层的数据结构是LSM Tree适合写多读少的场景&#xff0c;都是追加写入内存中的MemTable&#xff0c;写入一条删除&#xff08;或修改&#xff09;标记&#xff0c;而不用去访问实际的…

Java 设计模式之迭代器模式

文章目录 Java 设计模式之迭代器模式概述UML代码实现Java的迭代器 Java 设计模式之迭代器模式 概述 迭代器模式(Iterator)&#xff0c;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示。 UML Iterator&#xff1a;迭代器接口&#xff…

【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框

前言 目前使用vue-element-plus-admin想要做一个系统定时任务功能&#xff0c;可以选择不同的定时任务类型&#xff0c;比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框&#xff0c;需要动态显隐输入框才行&#xff0c;但是这个vue-element-plus-adm…

上位机学习之串口通信与温湿度项目实战

文章目录 一、串口通信与温湿度项目实战1、学习串口通信硬件&#xff1a;巩固RS-485串口硬件和通信基础知识1.1、串行通信的数据流和格式1.2、串口通信参数设置1.3、modbus协议基础1.4、数据存储和功能代码1.5、modbus通信报文分析 2、主-从通信仿真测试2.1、组件设计2.2、创建…