Spring Boot 3 Web程式設計全面指南 🚀
Spring Boot 3 提供了強大的 Web程式設計 功能,幫助開發者快速構建高效、安全且易於維護的Web應用程式。本文將詳細介紹Spring Boot 3 Web程式設計的關鍵點,幫助您深入理解並應用這些技術。
1. 建立Spring Boot專案 🛠️
使用Spring Initializr
Spring Initializr 是建立Spring Boot專案的首選工具。訪問 start.spring.io,選擇專案的 構建工具(如 Maven 或 Gradle)、語言(Java、Kotlin 或 Groovy)、Spring Boot版本,並新增 Web依賴(如 Spring Web)。
示例
# 使用命令列建立Spring Boot專案
curl https://start.spring.io/starter.zip \
-d dependencies=web \
-d name=demo \
-d packageName=com.example.demo \
-o demo.zip
unzip demo.zip
解釋:上述命令透過 curl
下載包含 Web依賴 的Spring Boot專案模板,並解壓到本地。
2. 控制器(Controller) 🎯
控制器負責處理HTTP請求並返回響應。使用 @Controller
或 @RestController
註解定義控制器類。
示例
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.ui.Model;
@Controller
public class HomeController {
@GetMapping("/")
public String home(Model model) {
model.addAttribute("message", "歡迎使用Spring Boot 3!");
return "home";
}
}
解釋:HomeController
使用 @Controller
註解,home
方法處理根路徑 /
的GET請求,並將資料傳遞給檢視 home
。
3. 路由對映(Mapping) 🗺️
路由對映定義URL路徑與控制器方法的對應關係。常用註解包括 @RequestMapping
、@GetMapping
、@PostMapping
等。
示例
@GetMapping("/users/{id}")
public String getUser(@PathVariable("id") Long id, Model model) {
// 業務邏輯
return "userDetail";
}
解釋:@GetMapping
對映 /users/{id}
路徑,@PathVariable
提取URL中的 id
引數。
4. 請求引數處理 📝
透過方法引數,使用 @RequestParam
、@PathVariable
等註解獲取請求引數。
示例
@GetMapping("/search")
public String search(@RequestParam("query") String query, Model model) {
// 搜尋邏輯
return "searchResults";
}
解釋:@RequestParam
提取查詢引數 query
,用於搜尋功能。
5. 檢視返回 🎨
檢視返回有兩種方式:返回檢視模型或返回JSON資料。
使用 ModelAndView
@GetMapping("/info")
public ModelAndView info() {
ModelAndView mav = new ModelAndView("info");
mav.addObject("data", "詳細資訊");
return mav;
}
使用 @ResponseBody
@GetMapping("/api/data")
@ResponseBody
public Data getData() {
return new Data("示例資料");
}
解釋:ModelAndView
返回檢視及模型資料,@ResponseBody
直接返回JSON資料。
6. 模板引擎 🖥️
整合模板引擎(如 Thymeleaf、Freemarker)生成動態HTML檢視。
示例(Thymeleaf)
依賴配置(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
模板檔案(home.html)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>主頁</title>
</head>
<body>
<h1 th:text="${message}">預設訊息</h1>
</body>
</html>
解釋:Thymeleaf 模板透過 th:text
顯示控制器傳遞的 message
資料。
7. 靜態資源 📂
將靜態資源(如CSS、JavaScript、圖片)放置在 src/main/resources/static
目錄,Spring Boot會自動對映。
示例
src/main/resources/static/
├── css/
│ └── style.css
├── js/
│ └── app.js
└── images/
└── logo.png
解釋:上述目錄結構確保靜態資源在訪問時無需額外配置,直接透過URL訪問。
8. 異常處理 ⚠️
使用 @ControllerAdvice
定義全域性異常處理器,統一處理應用中的異常。
示例
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.ui.Model;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception ex, Model model) {
model.addAttribute("error", ex.getMessage());
return "error";
}
}
解釋:GlobalExceptionHandler
捕捉所有異常,並返回錯誤檢視 error
,同時傳遞異常資訊。
9. 攔截器 🕵️
攔截器透過 HandlerInterceptor
介面攔截請求,進行預處理或後處理。
示例
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("請求路徑: " + request.getRequestURI());
return true;
}
}
配置攔截器
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoggingInterceptor loggingInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggingInterceptor).addPathPatterns("/**");
}
}
解釋:LoggingInterceptor
在每次請求前列印請求路徑,透過 WebConfig
註冊攔截器。
10. 表單處理 📝
透過 @ModelAttribute
、@Valid
等註解處理表單資料的繫結和驗證。
示例
import javax.validation.Valid;
import org.springframework.validation.BindingResult;
@PostMapping("/submit")
public String submitForm(@Valid @ModelAttribute("formData") FormData formData, BindingResult result) {
if (result.hasErrors()) {
return "form";
}
// 處理表單資料
return "success";
}
解釋:@Valid
觸發表單資料的驗證,BindingResult
檢查是否有驗證錯誤。
11. RESTful API 🌐
建立RESTful風格的API,使用 @RestController
註解,返回JSON資料。
示例
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RestController
public class ApiController {
@GetMapping("/api/users")
public List<User> getUsers() {
// 返回使用者列表
return userService.getAllUsers();
}
}
解釋:@RestController
自動將返回值序列化為JSON格式,適用於API開發。
12. 檔案上傳 📤
使用 @RequestParam
處理檔案上傳,並進行檔案儲存或處理。
示例
import org.springframework.web.multipart.MultipartFile;
import java.nio.file.*;
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
Path path = Paths.get("uploads/" + file.getOriginalFilename());
Files.write(path, file.getBytes());
return "上傳成功";
} catch (IOException e) {
e.printStackTrace();
return "上傳失敗";
}
}
return "檔案為空";
}
解釋:MultipartFile
接收上傳檔案,儲存到指定目錄 uploads/
。
13. 安全性 🔐
整合 Spring Security 實現身份驗證和授權,保護應用的安全性。
示例
依賴配置(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
安全配置
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
解釋:SecurityConfig
配置公共路徑 /public/**
可匿名訪問,其他路徑需認證,啟用表單登入。
14. 國際化 🌍
透過 MessageSource
和資原始檔實現應用的國際化支援。
示例
配置 MessageSource
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.ResourceBundleMessageSource;
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
資原始檔
src/main/resources/messages.properties
src/main/resources/messages_zh.properties
src/main/resources/messages_en.properties
使用示例
<h1 th:text="#{welcome.message}">歡迎資訊</h1>
解釋:根據使用者語言環境,載入相應的資原始檔顯示 welcome.message
。
15. 測試 🧪
編寫單元測試和整合測試,保障應用的穩定性和正確性。
示例
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
public class HomeControllerTest {
@Autowired
private HomeController homeController;
@Test
public void home_ShouldReturnHomeView() {
String view = homeController.home(new ExtendedModelMap());
assertThat(view).isEqualTo("home");
}
}
解釋:HomeControllerTest
使用 @SpringBootTest
載入應用上下文,測試 home
方法返回正確檢視。
總結 📌
Spring Boot 3 的 Web程式設計 涉及多個關鍵方面,包括 控制器、路由對映、檢視返回、異常處理、攔截器 等。這些功能幫助開發者高效地構建功能豐富、安全且易於維護的Web應用。透過合理應用上述技術,您可以快速提升開發效率,打造優質的Web解決方案。
Spring Boot 3 Web程式設計關鍵點概覽
關鍵點 | 描述 |
---|---|
建立專案 | 使用Spring Initializr或命令列工具建立專案 |
控制器 | 使用 @Controller 或 @RestController |
路由對映 | 使用 @RequestMapping 等註解定義路由 |
請求引數處理 | 使用 @RequestParam 、@PathVariable 等註解 |
檢視返回 | 返回檢視模型或JSON資料 |
模板引擎 | 整合Thymeleaf、Freemarker等模板引擎 |
靜態資源 | 放置在 static 目錄,自動對映 |
異常處理 | 使用 @ControllerAdvice 定義全域性異常處理器 |
攔截器 | 透過 HandlerInterceptor 攔截請求 |
表單處理 | 使用 @ModelAttribute 、@Valid 處理表單資料 |
RESTful API | 使用 @RestController 建立RESTful API |
檔案上傳 | 使用 MultipartFile 處理檔案上傳 |
安全性 | 整合Spring Security實現認證與授權 |
國際化 | 使用 MessageSource 實現多語言支援 |
測試 | 編寫單元測試與整合測試保障應用穩定性 |
透過掌握以上關鍵點,您將能夠全面理解並應用Spring Boot 3進行Web開發,構建功能強大且可靠的Web應用。