實戰項目技術點(1)

1、什么是REST?

  • REST(Representational State Transfer),表述性狀態轉換,它是一種軟件架構風格。
  • 傳統URL風格如下:
http://localhost:8080/user/getById?id=1 GET:查詢id為1的用戶
http://localhost:8080/user/saveUser POST:新增用戶
http://localhost:8080/user/updateUser POST:修改用戶
http://localhost:8080/user/deleteUser?id=1 GET:刪除id為1的用戶

我們看到,原始的傳統URL呢,定義比較復雜,而且將資源的訪問行為對外暴露出來了。

  • 基于REST風格URL如下:
http://localhost:8080/users/1 GET:查詢id為1的用戶
http://localhost:8080/users POST:新增用戶
http://localhost:8080/users PUT:修改用戶
http://localhost:8080/users/1 DELETE:刪除id為1的用戶

其中總結起來,就一句話:通過URL定位要操作的資源,通過HTTP動詞(請求方式)來描述具體的操作。

  • 在REST風格的URL中,通過四種請求方式,來操作數據的增刪改查。
  1. GET : 查詢
  2. POST :新增
  3. PUT :修改
  4. DELETE :刪除
    我們看到如果是基于REST風格,定義URL,URL將會更加簡潔、更加規范、更加優雅。
  • 注意事項:
  1. REST是風格,是約定方式,約定不是規定,可以打破
  2. 描述模塊的功能通常使用復數,也就是加s的格式來描述,表示此類資源,而非單個資源。
    如:users、emps、books…

2、開發規范-統一響應結果

前后端工程在進行交互時,使用統一響應結果 Result。

package com.itheima.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
private Integer code;//響應碼,1 代表成功; 0 代表失敗
private String msg; //響應信息 描述字符串
private Object data; //返回的數據
//增刪改 成功響應
public static Result success(){
return new Result(1,"success",null);}
//查詢 成功響應
public static Result success(Object data){
return new Result(1,"success",data);}
//失敗響應
public static Result error(String msg){
return new Result(0,msg,null);}
}

3、小tips

  • 1、如何限定請求方式是POST?
    @PostMapping
  • 2、怎么在controller中接收json格式的請求參數?
@RequestBody //把前端傳遞的json數據填充到實體類中
  • 3、如果請求路徑,存在一個共同點:都是以 /depts 作為開頭。(重復了)
    在Spring當中為了簡化請求路徑的定義,可以把公共的請求路徑,直接抽取到類上,在類上加一個注解
    @RequestMapping,并指定請求路徑"/depts"。
//注意事項:一個完整的請求路徑,應該是類上@RequestMapping的value屬性 + 方法上的
//@RequestMapping的value屬性
  • 4、怎么在controller中接收請求路徑中的路徑參數?
    @PathVariable
  • 5、在Mapper接口中,執行delete操作的SQL語句時,條件中的id值是不確定的是動態的,
    怎么實現呢?
    Mybatis中的動態SQL:foreach
  • 6、如果表單項的名字和方法中形參名不一致,該怎么辦?
public Result upload(String username,
Integer age,
MultipartFile file) //file形參名和請求參數
名image不一致

解決:使用**@RequestParam注解**進行參數綁定

public Result upload(String username,
Integer age,
@RequestParam("image") MultipartFile
file)

4、分頁插件

介紹

PageHelper是Mybatis的一款功能強大、方便易用的分頁插件,支持任何形式的單標、多表的
分頁查詢。
官網:https://pagehelper.github.io/

在執行empMapper.list()方法時,就是執行:select * from emp 語句,怎么能夠
實現分頁操作呢?
分頁插件幫我們完成了以下操作:
1. 先獲取到要執行的SQL語句:select * from emp 
2.SQL語句中的字段列表,變為:count(*)
3. 執行SQL語句:select count(*) from emp //獲取到總記錄數
4. 再對要執行的SQL語句:select * from emp 進行改造,在末尾添加 limit ? ,
?
5. 執行改造后的SQL語句:select * from emp limit ? , ?

代碼實現

1、在pom.xml引入依賴

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>

2、EmpMapper

@Mapper
public interface EmpMapper {
//獲取當前頁的結果列表
@Select("select * from emp")
public List<Emp> page(Integer start, Integer pageSize);
}

3、EmpServiceImpl

@Override
public PageBean page(Integer page, Integer pageSize) {
// 設置分頁參數
PageHelper.startPage(page, pageSize);
// 執行分頁查詢
List<Emp> empList = empMapper.list(name,gender,begin,end);
// 獲取分頁結果
Page<Emp> p = (Page<Emp>) empList; 
//封裝PageBean
PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
return pageBean;
}

5、文件上傳

簡介

  • 文件上傳,是指將本地圖片、視頻、音頻等文件上傳到服務器,供其他用戶瀏覽或下載的過程。
  • 文件上傳在項目中應用非常廣泛,我們經常發微博、發微信朋友圈都用到了文件上傳功能。
  • 上傳文件的原始form表單,要求表單必須具備以下三點(上傳文件頁面三要素):
  1. 表單必須有file域,用于選擇要上傳的文件
    <input type="file" name="image"/>
  2. 表單提交方式必須為POST
    通常上傳的文件會比較大,所以需要使用 POST 提交方式
  3. 表單的編碼類型enctype必須要設置為:multipart/form-data
    普通默認的編碼格式是不適合傳輸大型的二進制數據的,所以在文件上傳時,表單的編碼格 式必須設置為multipart/form-data

本地存儲

代碼實現

在服務器本地磁盤上創建images目錄,用來存儲上傳的文件(例:E盤創建images目錄)

@Slf4j
@RestController
public class UploadController {
@PostMapping("/upload")
public Result upload(String username, Integer age, MultipartFile
image) throws IOException {
log.info("文件上傳:{},{},{}",username,age,image);
//獲取原始文件名
String originalFilename = image.getOriginalFilename();
//將文件存儲在服務器的磁盤目錄
image.transferTo(new File("E:/images/"+originalFilename));
return Result.success();}
}

使用MultipartFile類提供的API方法,把臨時文件轉存到本地磁盤目錄下

MultipartFile 常見方法:
String getOriginalFilename(); //獲取原始文件名
String getName(); //獲取表單文件名
void transferTo(File dest); //將接收的文件轉存到磁盤文件中
long getSize(); //獲取文件的大小,單位:字節
byte[] getBytes(); //獲取文件內容的字節數組
InputStream getInputStream(); //獲取接收到的文件內容的輸入流

重名問題如何解決的方案:保證每次上傳文件時文件名都唯一的(使用UUID獲取隨機文件名

@Slf4j
@RestController
public class UploadController {
@PostMapping("/upload")
public Result upload(String username, Integer age, MultipartFile
image) throws IOException {
log.info("文件上傳:{},{},{}",username,age,image);
//獲取原始文件名
String originalFilename = image.getOriginalFilename();
//構建新的文件名
String extname =
originalFilename.substring(originalFilename.lastIndexOf("."));//文件
擴展名
String newFileName = UUID.randomUUID().toString()+extname;//
隨機名+文件擴展名
//將文件存儲在服務器的磁盤目錄
image.transferTo(new File("E:/images/"+newFileName));
return Result.success();}
}

在SpringBoot中,文件上傳時默認單個文件最大大小為1M
如果需要上傳大文件,可以在application.properties進行如下配置:

#配置單個文件最大上傳大小
spring.servlet.multipart.max-file-size=10MB
#配置單個請求最大上傳大小(一次請求可以上傳多個文件)
spring.servlet.multipart.max-request-size=100MB

6、阿里云OSS

  • 阿里云對象存儲OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存儲服務。使用OSS,您可以通過網絡隨時存儲和調用包括文本、圖片、音頻和視頻等在內的各種文件。
  • SDK:Software Development Kit 的縮寫,軟件開發工具包,包括輔助軟件開發的依賴(jar包)、代碼示例等,都可以叫做SDK。
  • Bucket:存儲空間是用戶用于存儲對象(Object,就是文件)的容器,所有的對象都必須隸屬于某個存儲空間。
    在Maven項目中加入依賴項(推薦方式):
//阿里云OSS依賴,導入pom.xml中
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>

如果使用的是Java 9及以上的版本,則需要添加JAXB相關依賴。添加JAXB相關依賴示例代碼如下:

<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>
  • 引入阿里云OSS上傳文件工具類(由官方的示例代碼改造而來):
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Component
public class AliOSSUtils {
private String endpoint = "https://oss-cnshanghai.aliyuncs.com";
private String accessKeyId = "LTAI5t9MZK8iq5T2Av5GLDxX";
private String accessKeySecret ="C0IrHzKZGKqU8S7YQcevcotD3Zd5Tc";
private String bucketName = "web-framework01";
//實現上傳圖片到OSS
public String upload(MultipartFile multipartFile) throws
IOException {
// 獲取上傳的文件的輸入流
InputStream inputStream = multipartFile.getInputStream();
// 避免文件覆蓋
String originalFilename =
multipartFile.getOriginalFilename();
String fileName = UUID.randomUUID().toString() +
originalFilename.substring(originalFilename.lastIndexOf("."));
//上傳文件到 OSS
OSS ossClient = new OSSClientBuilder().build(endpoint,
accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, fileName, inputStream);
//文件訪問路徑
String url = endpoint.split("//")[0] + "//" + bucketName +
"." + endpoint.split("//")[1] + "/" + fileName;
// 關閉ossClient
ossClient.shutdown();
return url;// 把上傳到oss的路徑返回}
}
  • 修改UploadController代碼:
import com.itheima.pojo.Result;
import com.itheima.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@Slf4j
@RestController
public class UploadController {
@Autowired
private AliOSSUtils aliOSSUtils;
@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
//調用阿里云OSS工具類,將上傳上來的文件存入阿里云
String url = aliOSSUtils.upload(image);
//將圖片上傳完成后的url返回,用于瀏覽器回顯展示
return Result.success(url);}
}

7、配置文件

常見配置文件格式對比:

  • XML(臃腫)
<server><port>8080</port><address>127.0.0.1</address>
</server>
  • properties(層級結構不清晰)
server.port=8080
server.address=127.0.0.1
  • yml/yaml**(推薦)**(簡潔、數據為中心)
server:port:  8080address: 127.0.0.1

yml基本語法:

  • 大小寫敏感
  • 數值前邊必須有空格,作為分隔符
  • 使用縮進表示層級關系,縮進時,不允許使用Tab鍵,只能用空格(idea中會自動將Tab轉換為空格)
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊即可
    # 表示注釋,從這個字符一直到行尾,都會被解析器忽略

yml數據格式:

  • 對象/Map集合:
user:
# key:valuename: zhangsanage: 18password: 123456
  • 數組/List/Set集合:
hobby:- java- game- sport

yml配置

在application.properties中的配置案例相關的配置項

#驅動類名稱
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#數據庫連接的url
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
#連接數據庫的用戶名
spring.datasource.username=root
#連接數據庫的密碼
spring.datasource.password=1234#配置mybatis的日志, 指定輸出到控制臺
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#開啟mybatis的駝峰命名自動映射開關 a_column ------> aCloumn
mybatis.configuration.map-underscore-to-camel-case=true#配置單個文件上傳大小限制
spring.servlet.multipart.max-file-size=10MB
#配置單個請求最大大小的限制 (一次請求中是可以上傳多個文件)
spring.servlet.multipart.max-request-size=100MB#阿里云OSS配置
aliyun.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=LTAI4GCH1vX6DKqJWxd6nEuW
aliyun.oss.accessKeySecret=yBshYweHOpqDuhCArrVHwIiBKpyqSL
aliyun.oss.bucketName=web-tlias

在application.yml中的配置案例相關的配置項

spring:#數據庫連接信息datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/tliasusername: rootpassword: 1234#文件上傳的配置servlet:multipart:max-file-size: 10MBmax-request-size: 100MB
#Mybatis配置
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true#阿里云OSS
aliyun:oss:endpoint: https://oss-cn-hangzhou.aliyuncs.comaccessKeyId: LTAI4GCH1vX6DKqJWxd6nEuWaccessKeySecret: yBshYweHOpqDuhCArrVHwIiBKpyqSLbucketName: web-tlias

@ConfigurationProperties

  • Spring提供的簡化方式套路:
  1. 需要創建一個實現類,且實體類中的屬性名和配置文件當中key的名字必須要一致
比如:配置文件當中叫endpoints,實體類當中的屬性也得叫endpoints,另外實體類當
中的屬性還需要提供 getter / setter方法
  1. 需要將實體類交給Spring的IOC容器管理,成為IOC容器當中的bean對象
    @Component
  2. 在實體類上添加 @ConfigurationProperties 注解,并通過perfect屬性來指定配置參數項的前綴
    @ConfigurationProperties可以批量的將外部的屬性配置注入到bean對象的屬性中。
  • 實體類:AliOSSProperties
import lombok.Data;
import
org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/*阿里云OSS相關配置*/
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {
//區域
private String endpoint;
//身份ID
private String accessKeyId ;
//身份密鑰
private String accessKeySecret ;
//存儲空間
private String bucketName;
}
  • AliOSSUtils工具類:
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Component //當前類對象由Spring創建和管理
public class AliOSSUtils {
//注入配置參數實體類對象
@Autowired
private AliOSSProperties aliOSSProperties;
/**
* 實現上傳圖片到OSS
*/
public String upload(MultipartFile multipartFile) throws
IOException {
//獲取阿里云OSS參數
String endpoint = aliOSSProperties.getEndpoint();
String accessKeyId = aliOSSProperties.getAccessKeyId();
String accessKeySecret = aliOSSProperties.getAccessKeySecret();
String bucketName = aliOSSProperties.getBucketName();
// 獲取上傳的文件的輸入流
InputStream inputStream = multipartFile.getInputStream();
// 避免文件覆蓋
String originalFilename =
multipartFile.getOriginalFilename();
String fileName = UUID.randomUUID().toString() +
originalFilename.substring(originalFilename.lastIndexOf("."));
//上傳文件到 OSS
OSS ossClient = new
OSSClientBuilder().build(aliOSSProperties.getEndpoint(),
aliOSSProperties.getAccessKeyId(),
aliOSSProperties.getAccessKeySecret());
ossClient.putObject(aliOSSProperties.getBucketName(),
fileName, inputStream);
//文件訪問路徑
String url =aliOSSProperties.getEndpoint().split("//")[0] +
"//" + aliOSSProperties.getBucketName() + "." +
aliOSSProperties.getEndpoint().split("//")[1] + "/" + fileName;
// 關閉ossClient
ossClient.shutdown();
return url;// 把上傳到oss的路徑返回}

pom.xml 引入依賴:提示阿里云 OSS 相關的配置項

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12952.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡常識一:常用工具

作為后端開發&#xff0c;特別是網絡游戲后端開發&#xff0c;經常需要處理各種現網問題&#xff0c;其中有不少是網絡相關的。 下面列舉的工具主要是在 linux 下的&#xff0c;診斷線上服務器問題的時候&#xff0c;往往是分秒必爭&#xff0c;所以這些工具都要用得很熟練&am…

程序在銀河麒麟系統下實現開機自啟及創建桌面快捷方式

目錄 1. 機器環境說明 2. 程序開機自啟動設置 2.桌面快捷方式設置 3. 附加說明 1. 機器環境說明 機器安裝的銀河麒麟操作系統屬性如下&#xff1a; 2. 程序開機自啟動設置 第1步&#xff1a;編寫一個腳本,用于自動化啟動&#xff0c;為便于后文描述&#xff0c;該腳本名稱…

干貨教程【軟件篇】| 免費實現游戲加速自由

需要這個游戲加速軟件的小伙伴可以關注一下文章底部公眾號&#xff0c;回復關鍵詞【zdjs】即可獲取。 該軟件可以實現免費的游戲加速&#xff0c;實測延遲低體驗好&#xff01; 建議看到后趕緊保存下來防止丟失&#xff01; 下面講一下該軟件安裝流程~ 通過鏈接可以得到下面…

2.go語言初始(二)

本篇博客涉及到go 的基礎數據類型、 go 語言中的運算符、轉義字符、格式化輸出、字符串操作 go 語言中的運算符 在 go 語言中&#xff0c;基本數據類型主要包括以下幾類&#xff1a;整數類型、浮點數類型、復數類型、布爾類型、字符串類型、字節類型&#xff08;byte&#xf…

Linux進程控制——Linux進程程序替換

前言&#xff1a;Linux進程控制包含了進程終止&#xff0c;進程等待&#xff0c;進程程序替換。走到現在我們也只剩下進程程序替換沒介紹了&#xff0c;那么讓我們來看看進程程序替換到底是什么&#xff01; 本篇主要內容&#xff1a; 替換原理 替換函數 實現簡易shell 我們所創…

【sql】sql中with as 介紹與使用jsqlparser解析sql

文章目錄 一. 定義二. 用法三. 解析 一. 定義 with A as (select * from class) 也就是將重復用到的大批量 的SQL語句&#xff0c;放到with as 中&#xff0c;加一個別名&#xff0c;在后面用到的時候就可以直接用。對于大批量的SQL數據&#xff0c;起到優化的作用。 with子句…

Broad Learning System (BLS) 寬度學習系統

寬度學習&#xff08;Broad Learning System, BLS&#xff09;是一種有效的神經網絡學習框架&#xff0c;旨在通過擴展網絡的寬度而不是深度來提高學習能力和效率。與傳統的深度學習相比&#xff0c;寬度學習通過堆疊多層特征節點和增強節點來構建網絡&#xff0c;從而避免了深…

oracle 臨時表

oracle 臨時表 conn scott/tiger --會話內保留行 drop table tmp1; CREATE GLOBAL TEMPORARY TABLE tmp1 ON COMMIT PRESERVE ROWS AS SELECT * FROM emp;SELECT TABLESPACE_NAME,CURRENT_USERS FROM V$SORT_SEGMENT;SELECT * FROM TMP1; INSERT INTO TMP1 SELECT * FROM…

Maven依賴管理項目構建

Maven依賴管理項目構建工具 目錄 文章目錄 Maven依賴管理項目構建工具目錄一、Maven簡介1、為什么學習Maven1.1、Maven是一個依賴管理工具1.2、Maven是一個構建工具1.3、結論 2. Maven介紹3. Maven軟件工作原理模型圖&#xff08;了解&#xff09; 二、Maven安裝和配置1. Mave…

PostgreSQL擴展之PGroonga:多語言全文搜索

簡介 PGroonga 是一個 PostgreSQL 擴展&#xff0c;它增加了基于 Groonga 的全文搜索索引方法。雖然原生的 PostgreSQL 支持全文索引&#xff0c;但它僅限于基于字母和數字的語言。PGroonga 提供了更廣泛的字符支持&#xff0c;使其成為 PostgreSQL 支持的語言的超集&#xff…

(實測驗證)Gitee代碼托管嘗試(一)——克隆/下載

一、登錄 Gitee&#xff08;碼云&#xff09;代碼托管平臺&#xff1a; Gitee - 基于 Git 的代碼托管和研發協作平臺 新建個人賬戶如下&#xff1a; 二、SSH 公鑰設置 1、在git安裝目錄打開“git-cmd.exe”; 2、通過命令 ssh-keygen 生成 SSH Key&#xff1a; ssh-keygen …

Linux進程概念總結

這里總結下Linux進程概念總結? 馮諾依曼&#xff1a; CPU 運算器與控制器RAM 內存&#xff08;存儲器&#xff09;Cache 緩存&#xff08;一種技術&#xff09;不屬于馮諾依曼體系結構。ROM 磁盤&#xff08;輸入輸出設備&#xff09;磁盤 既可以從硬盤讀取數據也可以向硬盤…

3-3 基于RYU的流量風暴事件原理與響應策略

在傳統網絡中&#xff0c;存在著一定的廣播流量&#xff0c;占據了一部分的網絡帶寬。同時&#xff0c;在有環的拓撲中&#xff0c;如果不運行某些協議&#xff0c;廣播數據還會引起網絡風暴&#xff0c;使網絡癱瘓。 如有以下的一個網絡拓撲結構&#xff08;3_2_topoplus.py) …

零基礎學Java第十四天之枚舉

枚舉 1、理解 枚舉&#xff08;Enumeration&#xff0c;通常簡寫為enum&#xff09;在編程語言中是一種特殊的數據類型&#xff0c;它允許你為變量定義一組命名的常量。這些常量通常表示一組有限的值&#xff0c;比如一周的七天、顏色的集合或者狀態的集合等。枚舉類型的主要目…

es 分詞器(五)之elasticsearch-analysis-jieba 8.7.0

es 分詞器&#xff08;五&#xff09;之elasticsearch-analysis-jieba 8.7.0 今天咱們就來講一下es jieba 8.7.0 分詞器的實現&#xff0c;以及8.x其它版本的實現方式&#xff0c;如果想直接使用es 結巴8.x版本&#xff0c;請直接修改pom文件的elasticsearch.version版本號即可…

再談畢業論文設計投機取巧之IVR自動語音服務系統設計(信息與通信工程專業A+其實不難)

目錄 舉個IVR例子格局打開&#xff0c;萬物皆能IVR - 把《民法典》搬上IVR IVR系統其實可鹽可甜。還能可圈可點。 戎馬一生&#xff0c;歸來依然IVR。 舉個IVR例子 以下是IVR系統的一個例子。 當您撥打電話進入IVR系統。 首先檢驗是否為工作時間。 如是&#xff0c;您將被送入…

基于51單片機的自動澆花器電路

一、系統概述 自動澆水灌溉系統設計方案&#xff0c;以AT89C51單片機為控制核心&#xff0c;采用模塊化的設計方法。 組成部分為&#xff1a;5V供電模塊、土壤濕度傳感器模塊、ADC0832模數轉換模塊、水泵控制模塊、按鍵輸入模塊、LCD顯示模塊和聲光報警模塊&#xff0c;結構如…

垃圾分類管理系統java項目

文章目錄 垃圾分類管理系統一、項目演示二、項目介紹三、系統部分功能截圖四、部分代碼展示五、底部獲取項目&#xff08;9.9&#xffe5;帶走&#xff09; 垃圾分類管理系統 一、項目演示 垃圾分類管理系統 二、項目介紹 系統角色&#xff1a;管理員、用戶 1、登錄、注冊功能…

機器人非線性系統反饋線性化與解耦

機器人非線性系統的反饋線性化和解耦是控制理論中的兩個重要概念&#xff0c;它們分別用于簡化系統分析和設計過程&#xff0c;提高控制系統的性能。 首先&#xff0c;反饋線性化是一種將非線性系統轉化為線性系統的技術。在機器人控制中&#xff0c;由于機器人本身是一個強耦…

?python使用selenium進行Web自動化測試?

什么是selenium Selenium 是 ThoughtWorks 提供的一個強大的基于瀏覽器的 Selenium 是一個用于 Web 應用程序測試的工具&#xff0c;測試直接自動運行在瀏覽器中&#xff0c;就像真正的用戶在手工操作一樣。支持的瀏覽器包括 IE、Chrome 和 Firefox 等。這個工具的主要功能包…