SpringBoot Web快速入門_從零搭建你的第一個Web應用

在 Java 企業級開發領域,SpringBoot 以其 “約定優于配置” 的理念徹底革新了傳統 Spring 應用的開發模式。根據 2023 年 JetBrains 開發者調查報告,超 65% 的 Java 開發者將 SpringBoot 選為 Web 開發的首選框架。其優勢顯著:快速啟動,借助 starter 依賴一鍵集成主流技術棧;極簡配置,自動裝配機制免去 XML 配置的繁雜;生產就緒,內置健康檢查、指標監控等企業級功能;生態繁榮,覆蓋微服務、安全、數據訪問等全場景解決方案。本文將逐步引導你搭建第一個 SpringBoot Web 應用,通過實戰展示核心開發流程,助力你快速掌握現代 Java Web 開發的關鍵范式。

一、環境準備與工程創建

(一)項目創建步驟詳解

  1. 新建項目:在 IDEA 中,依次點擊File -> New -> Project -> Spring Initializr

  2. 基礎配置:

  • Project:選擇 Maven,因其強大的依賴管理和項目構建能力,被廣泛應用于 Java 項目。

  • Package name:可由系統自動生成,也可根據項目需求自定義,建議采用公司域名反轉加項目名的方式,如com.example.demo ,以確保唯一性和規范性。

  1. 依賴選擇:
  • 勾選Spring Web ,這是構建 Web 應用的核心模塊,它整合了 Spring MVC 框架以及內嵌的 Tomcat 服務器等,為創建 RESTful 接口等 Web 開發工作提供基礎支持。

  • 版本選擇上,推薦使用穩定的 3.2.x 系列,盡量避免選擇帶有SNAPSHOT標識的版本,這類版本通常為開發中的不穩定版本,可能存在較多未修復的問題和兼容性風險。

(二)項目結構解析

項目創建完成后,其基本結構如下:

├── pom.xml # Maven依賴管理文件,用于聲明項目所需的各種依賴庫及其版本信息├── src│   ├── main│   │   ├── java│   │   │   └── com│   │   │       └── example│   │   │           └── demo│   │   │               └── DemoApplication.java # 主啟動類,Spring Boot應用的入口│   │   └── resources│   │       ├── application.properties # 應用配置文件,可用于修改服務器端口、數據庫連接等配置│   │       └── static # 存放靜態資源,如CSS、JS、圖片等│   └── test # 測試代碼目錄,用于編寫單元測試、集成測試等代碼

pom.xml文件在項目中至關重要,它管理著項目的依賴關系。例如,當我們添加Spring Web依賴時,pom.xml中會自動添加如下代碼:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

這段代碼聲明了項目對spring-boot-starter-web的依賴,Maven 會根據此配置自動下載相關的庫及其依賴項。

二、第一個 REST 接口開發

(一)編寫控制器類

com.example.demo包下創建HelloController.java文件,代碼如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController // 表明這是一個處理HTTP請求并返回JSON數據(默認)的控制器類
@RequestMapping("/api") // 定義該控制器下所有請求的統一前綴為/api
public class HelloController {@RequestMapping("/hello") // 映射HTTP GET請求到/hello路徑public String sayHello(String name) {if (name == null || name.isEmpty()) {name = "World";}return "Hello, " + name + "!";}
}

在這段代碼中,@RestController注解是 Spring MVC 提供的,它將類標記為一個 RESTful 風格的控制器,意味著該類中的方法返回值會直接作為 HTTP 響應體,并且默認以 JSON 格式返回(如果返回對象不是字符串等簡單類型,Spring 會自動將其轉換為 JSON)。@RequestMapping注解用于映射 URL 路徑,這里@RequestMapping("/api")設置了控制器的基礎路徑,@RequestMapping("/hello")進一步細化了處理/api/hello路徑的請求。sayHello方法接收一個名為name的參數,若參數為空則默認值為World,并返回拼接后的問候語。

(二)啟動類解析

Spring Boot 項目的啟動類通常帶有@SpringBootApplication注解,以DemoApplication.java為例:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

@SpringBootApplication是一個組合注解,它包含了以下幾個重要注解的功能:

  • @Configuration:標記該類為配置類,允許在類中定義@Bean方法來創建和配置 Spring 的 Bean。

  • @EnableAutoConfiguration:啟用自動配置功能,Spring Boot 會根據項目的依賴和配置自動配置 Spring 應用的各種組件,例如根據spring-boot-starter-web依賴自動配置 Tomcat 服務器、Spring MVC 等相關組件。

  • @ComponentScan:自動掃描指定包及其子包下的組件(如@Component@Service@Repository@Controller等注解標記的類),并將它們注冊到 Spring 容器中。

SpringApplication.run(DemoApplication.class, args)方法是 Spring Boot 應用的啟動入口,它會啟動 Spring 應用上下文,初始化各種自動配置的組件,加載并啟動內嵌的 Tomcat 服務器(因為引入了spring-boot-starter-web依賴)等,從而使應用準備好接收和處理 HTTP 請求。

(三)啟動與調試

  1. 運行方式
  • 在 IDEA 中,右鍵點擊啟動類DemoApplication ,選擇Run 'DemoApplication' ,IDEA 會使用內置的 Maven 插件啟動項目。

  • 通過命令行運行,首先進入項目根目錄,然后執行mvn spring-boot:run命令,Maven 會下載項目所需的依賴(如果本地倉庫中沒有),并啟動 Spring Boot 應用。

  1. 控制臺監控
  • 啟動過程中,觀察控制臺輸出的日志。其中,會顯示 Tomcat 服務器啟動的端口信息,默認情況下是 8080 端口,如Tomcat started on port(s): 8080 (http)

  • 檢查自動配置報告(也稱為條件評估報告),在控制臺日志中可以找到相關信息。自動配置報告詳細列出了 Spring Boot 自動配置的各個組件以及配置的條件是否滿足等信息,有助于排查自動配置過程中可能出現的問題。例如,如果某個組件沒有按照預期進行配置,可以查看報告中該組件對應的條件是否未滿足,從而找到問題所在。在運行時,建議優先選擇 Debug 模式啟動,這樣在項目出現問題時,能夠更方便地進行調試,跟蹤代碼的執行流程,查看變量的值等。當項目成功運行后,IDEA 控制臺會顯示 Spring 的標識和版本信息,表明 Spring Boot 應用已成功啟動。

三、接口測試與驗證

(一)瀏覽器測試

最簡單的測試方式是使用瀏覽器。假設應用啟動在默認的 8080 端口,在瀏覽器地址欄輸入http://localhost:8080/api/hello?name=Bob ,瀏覽器會發送一個 HTTP GET 請求到/api/hello路徑,并攜帶參數name=Bob 。服務器接收到請求后,由HelloControllersayHello方法處理,返回Hello, Bob!的結果,并顯示在瀏覽器頁面上。這種方式適用于簡單的接口測試,能夠直觀地看到接口返回的結果。

(二)Postman 高級測試

Postman 是一款功能強大的 API 測試工具,可用于更全面地測試接口。

  1. GET 請求測試
  • Method:選擇 GET,表示發送 HTTP GET 請求。

  • URL:輸入http://localhost:8080/api/hello ,若需要攜帶參數,可在 URL 后添加,如http://localhost:8080/api/hello?name=Alice 。點擊發送按鈕,Postman 會顯示接口返回的結果,包括狀態碼(如 200 表示請求成功)、響應頭和響應體等信息。通過 Postman,可以方便地查看接口返回的數據格式是否正確,以及測試不同參數組合下接口的表現。

  1. POST 請求示例(擴展)

    假設我們有一個創建用戶的接口,控制器代碼如下:

@RestController
@RequestMapping("/users")
public class UserController {@PostMappingpublic User createUser(@RequestBody User user) {// 這里調用業務邏輯層保存用戶,假設userService已正確注入return userService.save(user);}
}

在 Postman 中測試該 POST 接口時:

  • Method:選擇 POST。

  • URL:輸入http://localhost:8080/users

  • Body:選擇raw ,并將數據格式設置為 JSON(因為@RequestBody注解通常用于接收 JSON 格式的數據),然后在文本框中輸入用戶數據,例如{"username":"testUser","password":"123456"} 。點擊發送按鈕后,Postman 會將這些數據以 HTTP POST 請求的方式發送到服務器,服務器接收到請求后,會將 JSON 數據轉換為User對象,并由createUser方法處理,返回創建后的用戶對象信息(如果保存成功)。通過 Postman 的這種方式,可以方便地測試需要傳遞復雜數據結構的接口,如創建用戶、提交訂單等涉及多個字段的接口。

四、項目配置調優

(一)修改應用配置

Spring Boot 通過application.properties文件進行應用的配置。

  1. 修改服務器端口:默認情況下,Spring Boot 應用運行在 8080 端口。若該端口已被占用或有其他需求,可以在application.properties文件中添加如下配置來修改端口:
server.port=9090

修改后,重新啟動應用,應用將在 9090 端口運行。

2. 開啟調試模式:在開發過程中,開啟調試模式有助于查看更詳細的錯誤信息,方便排查問題。在application.properties文件中添加:

debug=true

開啟調試模式后,Spring Boot 會在控制臺輸出更多關于自動配置過程、Bean 的創建等詳細信息,當應用出現錯誤時,也會顯示更全面的堆棧跟蹤信息,幫助開發者快速定位問題。

3. 配置 JPA(示例):若項目需要使用 JPA(Java Persistence API)進行數據庫操作,以連接 MySQL 數據庫為例,在application.properties文件中添加如下配置:

spring.jpa.hibernate.ddl - auto=updatespring.datasource.url=jdbc:mysql://localhost:3306/demospring.datasource.username=rootspring.datasource.password=123456

其中,spring.jpa.hibernate.ddl - auto=update表示 Hibernate 會根據實體類的定義自動更新數據庫表結構(開發環境常用,生產環境需謹慎使用,避免數據丟失)。spring.datasource.url指定了數據庫的連接地址,spring.datasource.usernamespring.datasource.password分別是數據庫的用戶名和密碼。通過這些配置,Spring Boot 能夠自動配置 JPA 相關組件,連接到 MySQL 數據庫,并進行數據持久化操作。

(二)常用開發技巧

  1. 熱部署:開發過程中,每次修改代碼都需要重啟應用是一件繁瑣的事情。Spring Boot 提供了spring-boot-devtools依賴來實現熱部署功能。在pom.xml文件中添加如下依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional>
</dependency>

添加依賴后,當修改 Java 類、配置文件等資源時,應用會自動重啟(比手動重啟快很多),無需手動停止和啟動應用。同時,對于 HTML、CSS、JS 等靜態資源的修改,無需重啟應用即可直接生效,大大提高了開發效率。

2. 跨域配置:當前端應用和后端 Spring Boot 應用部署在不同的域名或端口下時,會出現跨域問題。Spring Boot 可以通過@CrossOrigin注解方便地解決跨域問題。在控制器類或方法上添加該注解,例如:

@RestController@RequestMapping("/api")@CrossOrigin(origins = "http://localhost:3000") // 允許來自http://localhost:3000的跨域請求public class HelloController {//...}

上述代碼中,@CrossOrigin(origins = "``http://localhost:3000``")表示允許來自http://localhost:3000這個源的跨域請求。如果需要允許所有源的跨域請求,可以使用@CrossOrigin(origins = "*") ,但在生產環境中,出于安全考慮,不建議這樣使用,應盡量明確指定允許的源。

3. 接口文檔:為了方便團隊協作和接口的維護,生成接口文檔是很有必要的。Spring Boot 可以集成 Swagger3(基于 OpenAPI 規范)來自動生成接口文檔。首先,在pom.xml文件中添加 Swagger3 的依賴:

<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>3.0.0</version>
</dependency>

然后,創建一個 Swagger 的配置類,例如:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.example.demo")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Spring Boot API Documentation").description("This is the API documentation for the Spring Boot application").version("1.0").build();}
}

配置完成后,啟動應用,訪問http://localhost:8080/swagger-ui.html (假設應用運行在 8080 端口),即可看到自動生成的接口文檔,文檔中詳細列出了各個接口的路徑、請求方法、參數、返回值等信息,方便開發人員查看和使用。

五、最佳實踐建議

(一)分層架構

遵循 Controller - Service - DAO 分層架構是良好的開發實踐。

  • Controller 層:負責接收 HTTP 請求,進行參數校驗、數據格式轉換等工作,并調用 Service 層的業務邏輯方法。例如在HelloController中,接收/api/hello的請求,并將請求參數傳遞給業務邏輯處理(雖然這里業務邏輯簡單,只是返回固定格式的問候語)。

  • Service 層:主要處理業務邏輯,例如用戶注冊時的密碼加密、數據校驗、調用 DAO 層進行數據持久化操作等。它將業務邏輯封裝成一個個服務方法,供 Controller 層調用,提高代碼的復用性和可維護性。

  • DAO 層:負責與數據庫進行交互,執行數據庫的增刪改查操作。例如在使用 JPA 時,通過定義Repository接口來實現對數據庫表的操作。采用分層架構可以使代碼結構更加清晰,各層職責單一,便于團隊協作開發和代碼的維護與擴展。例如,當數據庫操作方式發生變化時,只需修改 DAO 層的代碼,而不會影響到 Controller 層和 Service 層的業務邏輯。

(二)統一響應

封裝標準的 Response 對象有助于統一接口的返回格式,提高接口的可讀性和可維護性。通常,Response 對象包含狀態碼、消息和數據三個部分。例如,定義一個通用的 Response 類:

public class Response<T> {private int code; // 狀態碼,如200表示成功,500表示服務器內部錯誤private String message; // 響應消息,用于描述操作結果private T data; // 響應數據,根據接口返回的具體數據類型而定public Response(int code, String message, T data) {this.code = code;this.message = message;this.data = data;}// 省略getter和setter方法
}

在控制器方法中返回統一格式的 Response 對象,例如:

@RestController
@RequestMapping("/api")
public class HelloController {@RequestMapping("/hello")public Response<String> say Hello(String name) {?String result = "Hello, " + (name == null || name.isEmpty() ? "World" : name) + "!";?return new Response<>(200, "success", result);?
}?
}

這樣,無論接口成功還是失敗,返回的數據格式都保持一致,前端在處理響應時也能更統一、高效。例如,當接口調用成功時,返回狀態碼 200 和對應的數據;當出現錯誤時,返回相應的錯誤狀態碼和錯誤信息,前端可以根據狀態碼快速判斷接口調用情況并進行相應處理。

(三)異常處理

在項目開發中,合理的異常處理能夠提高應用的健壯性和用戶體驗。Spring Boot 提供了 @ControllerAdvice@ExceptionHandler 注解來實現全局異常處理。

首先,創建一個全局異常處理類:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice // 標識該類為全局異常處理類
public class GlobalExceptionHandler {// 處理空指針異常@ExceptionHandler(NullPointerException.class)@ResponseBody // 將返回結果轉換為JSON格式public Response<String> handleNullPointerException(NullPointerException e) {return new Response<>(500, "發生空指針異常:" + e.getMessage(), null);}// 處理其他未捕獲的異常@ExceptionHandler(Exception.class)@ResponseBodypublic Response<String> handleException(Exception e) {return new Response<>(500, "發生未知異常:" + e.getMessage(), null);}
}

當應用中拋出 NullPointerException 或其他未被捕獲的異常時,全局異常處理類會捕獲這些異常,并返回統一格式的錯誤響應。例如,當代碼中出現空指針異常時,會返回狀態碼 500 和具體的異常信息,方便開發者排查問題,同時也能給前端一個清晰的錯誤提示,而不是展示晦澀的異常堆棧信息。

(四)代碼規范

良好的代碼規范有助于提高代碼的可讀性和可維護性,便于團隊協作開發。以下是一些常見的代碼規范建議:

  1. 命名規范
  • 類名使用帕斯卡命名法(PascalCase),即每個單詞的首字母都大寫,如 HelloControllerUserService

  • 方法名、變量名使用駝峰命名法(camelCase),即第一個單詞的首字母小寫,后續單詞的首字母大寫,如 sayHellouserName

  • 常量名全部大寫,單詞之間用下劃線分隔,如 MAX_AGEDEFAULT_PAGE_SIZE

  1. 代碼格式
  • 合理使用縮進,通常使用 4 個空格作為縮進單位,使代碼結構清晰。

  • 在運算符前后、逗號后添加空格,如 int a = 1 + 2;List<String> list = new ArrayList<>();

  • 每行代碼不宜過長,建議不超過 80 個字符,當代碼過長時進行換行處理。

  1. 注釋規范
  • 為類、方法、重要的變量添加注釋,說明其功能、參數、返回值等信息。

  • 使用 /** */ 為類和方法添加文檔注釋,使用 // 為單行代碼添加注釋。例如:

/*** 問候控制器,處理與問候相關的HTTP請求*/
@RestController
@RequestMapping("/api")
public class HelloController {/*** 生成問候語* @param name 問候的對象名稱,可為空* @return 包含問候語的統一響應對象*/@RequestMapping("/hello")public Response<String> sayHello(String name) {// 處理name為空的情況,默認使用"World"String result = "Hello, " + (name == null || name.isEmpty() ? "World" : name) + "!";return new Response<>(200, "success", result);}
}

六、總結與展望

通過本文的學習,我們從零開始搭建了一個簡單的 Spring Boot Web 應用,了解了項目的創建、REST 接口的開發、接口測試、項目配置調優以及一些最佳實踐建議。Spring Boot 以其簡潔、高效的特點,極大地簡化了 Java Web 應用的開發流程,讓開發者能夠更專注于業務邏輯的實現。

在實際開發中,隨著項目的復雜度增加,我們還可以進一步學習 Spring Boot 的其他功能,如數據訪問(整合 MyBatis、JPA 等)、安全認證(Spring Security)、緩存(Redis)、消息隊列(RabbitMQ、Kafka)等,不斷擴展應用的功能和性能。

希望本文能夠幫助你快速入門 Spring Boot Web 開發,為后續的學習和實踐打下堅實的基礎。在開發過程中,多動手實踐、多查閱官方文檔和相關資料,不斷積累經驗,你會發現 Spring Boot 開發的樂趣和魅力。

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

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

相關文章

手持 Mid360 + RealSense 相機 + Jetson Orin 一體平臺

這篇博客是我們開源的一個項目介紹&#xff0c;包括3D結構件 STP 文件與常見 SLAM 工程在 Arm 設備上編譯手冊等&#xff0c;將 Livox Mid360、Realsense 相機、Nvidia Jetson Orin、定制電池放在了一個手持設備上&#xff0c;同時這個手持設備預留了底部螺紋孔&#xff0c;當你…

H7-TOOL固件2.31發布,支持250M示波器,支持IAR下載算法加載運行,上位機支持UTF-8編碼,增加多款脫機燒錄芯片支持

【PC軟件】V2.3.1 1. 脫機燒錄功能更新: - 添加芯片: - 自動填充文件名、Flash地址、Flash大小、SRAM地址和SRAM大小 - FLM算法文件不支持自動填寫文件名&#xff0c;當生成文件后需要手動更新 - 廠商列表欄鼠標右鍵菜單可復制廠商名 - 修復添加芯片排列次序的問題…

自然語言處理——06 遷移學習(上)

1 fasttext工具介紹 1.1 介紹 fasttext 是 Facebook AI Research&#xff08;FAIR&#xff09;開發的開源 NLP 工具包&#xff0c;專門用來解決文本相關任務&#xff0c;比如情感分析、文本分類&#xff08;判斷新聞屬于體育/財經等&#xff09;、識別“人名/地名”這類實體&a…

數據庫MVCC是什么

問題數據庫MVCC是什么我的回答MVCC&#xff0c;全稱是"多版本并發控制"(Multi-Version Concurrency Control)&#xff0c;是數據庫管理系統中常用的一種并發控制技術。說白了&#xff0c;它就是通過維護數據的多個版本&#xff0c;讓讀操作不會被寫操作阻塞&#xff…

游戲廣告投放數據分析項目:拆解投放的“流量密碼”

用數據說話&#xff1a;1441條投放記錄拆解游戲廣告投放的“流量密碼”一、數據概況 & 處理思路 先放一張數據全家福&#xff0c;字段 13 個&#xff0c;樣本 1441 條&#xff0c;缺失值 0&#xff0c;只做了一件事&#xff1a;把“未知大小”“無”等臟數據清洗掉。 impor…

數據庫服務語句應用

文章目錄&#x1f31f;數據庫語句應用介紹&#x1f340;數據庫語句分類介紹DDL&#xff08;Data Definition Language&#xff09;數據定義語言DCL&#xff08;Data Control Language&#xff09;數據控制語言DML&#xff08;Data Manipulation Language&#xff09;數據操作語…

解釋器模式與布爾表達式的C++實現

詳細探討一下解釋器模式(Interpreter Pattern)以及如何使用它來實現一個簡單的布爾表達式求值器。 第一部分:解釋器模式詳解 1. 模式定義與意圖 解釋器模式是一種行為設計模式,它給定一個語言,定義其文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中…

ELK 重難點解析以及最佳實踐

ELK 重難點解析以及最佳實踐 目錄 ELK簡介核心組件詳解使用技巧重難點解析Spring Boot集成具體場景使用最佳實踐 ELK簡介 什么是ELK ELK是一個開源的日志分析平臺&#xff0c;由三個核心組件組成&#xff1a; Elasticsearch: 分布式搜索引擎&#xff0c;用于存儲和檢索日…

【PyTorch】單對象分割項目

對象分割是在圖像中找到目標對象的邊界的過程。單目標分割的重點是自動勾勒出圖像中一個目標對象的邊界。對象邊界通常由二進制掩碼定義。 通過二進制掩碼&#xff0c;可以在圖像上覆蓋輪廓以勾勒出對象邊界。例如以下圖片描繪了胎兒的超聲圖像、胎兒頭部的二進制掩碼以及覆蓋在…

esp dl

放下了好多年 又回到了dl 該忘的也忘的差不多了 其實沒啥復雜的 只是不習慣 熟悉而已 好吧 現代的人工智能體 還是存在著很大的問題 眼睛 耳朵 思考 雖然功能是正常的 但距離&#xff02;真正&#xff02;(&#xff09;意思上的獨立意識個體 還是差別很大 再等個幾十年 看看…

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城

詳解ThreadLocal<HttpServletRequest> requestThreadLocal

public static ThreadLocal<HttpServletRequest> requestThreadLocal ThreadLocal.withInitial(() -> null);一、代碼逐部分詳解 1. public static public&#xff1a;表示這個變量是公開的&#xff0c;其他類可以訪問。static&#xff1a;表示這是類變量&#xff0c…

Vue2 響應式系統設計原理與實現

文章目錄Vue2 響應式系統設計原理與實現Vue2 響應式系統設計原理與實現 Vue2 的響應式原理主要基于以下幾點&#xff1a; 使用 Object.defineProperty () 方法對數據對象的屬性進行劫持 當數據發生變化時&#xff0c;通知依賴該數據的視圖進行更新 實現一個發布 - 訂閱模式&a…

探索 JUC:Java 并發編程的神奇世界

探索 JUC&#xff1a;Java 并發編程的神奇世界 在 Java 編程領域&#xff0c;隨著多核處理器的普及和應用場景復雜度的提升&#xff0c;并發編程變得愈發重要。Java 并發包&#xff08;JUC&#xff0c;Java.util.concurrent&#xff09;就像是一座寶藏庫&#xff0c;為開發者提…

selenium采集數據怎么應對反爬機制?

selenium是一個非常強大的瀏覽器自動化工具&#xff0c;通過操作瀏覽器來抓取動態網頁內容&#xff0c;可以很好的處理JavaScript和AJAX加載的網頁。 它能支持像點擊按鈕、懸停元素、填寫表單等各種自動化操作&#xff0c;所以很適合自動化測試和數據采集。 selenium與各種主流…

指定文件夾上的壓縮圖像格式tiff轉換為 jpg 批量腳本

文章大綱 背景簡介 代碼 背景簡介 隨著數字成像技術在科研、醫學影像和遙感等領域的廣泛應用,多頁TIFF(Tag Image File Format)文件因其支持多維數據存儲和高位深特性,成為存儲序列圖像、顯微鏡切片或衛星遙感數據的首選格式。然而在實際應用中,這類文件存在以下顯著痛點…

Docker 部署 MySQL 8.0 完整指南:從拉取鏡像到配置遠程訪問

目錄前言一、拉取鏡像二、查看鏡像三、運行容器命令參數說明&#xff1a;四、查看運行容器五、進入容器內部六、修改 MySQL 配置1. 創建配置文件2. 配置內容七、重啟 MySQL 服務八、設置 Docker 啟動時自動啟動 MySQL九、再次重啟 MySQL十、授權遠程訪問1. 進入容器內部2. 登錄…

IntelliJ IDEA 常用快捷鍵筆記(Windows)

前言&#xff1a;特別標注的快捷鍵&#xff08;Windows&#xff09;快捷鍵功能說明Ctrl Alt M將選中代碼提取成方法Ctrl Alt T包裹選中代碼塊&#xff08;try/catch、if、for 等&#xff09;Ctrl H查看類的繼承層次Alt 7打開項目結構面板Ctrl F12打開當前文件結構視圖Ct…

疏老師-python訓練營-Day54Inception網絡及其思考

浙大疏錦行 DAY54 一、 inception網絡介紹 今天我們介紹inception&#xff0c;也就是GoogleNet 傳統計算機視覺的發展史 從上面的鏈接&#xff0c;可以看到其實inceptionnet是在resnet之前的&#xff0c;那為什么我今天才說呢&#xff1f;因為他要引出我們后面的特征融合和…

LeetCode第3304題 - 找出第 K 個字符 I

題目 解答 class Solution {public char kthCharacter(int k) {int n 0;int v 1;while (v < k) {v << 1;n;}String target kthCharacterString(n);return target.charAt(k - 1);}public String kthCharacterString(int n) {if (n 0) {return "a";}Str…