文章目錄
- 一、RESTful 風格
- 二、Spring Boot 靜態資源處理
- 三、Spring Boot 首頁(歡迎頁)
- 四、@PathVariable 注解
- 五、攔截器(Interceptor)
- 六、過濾器(Filter)
- 七、觸發器(Trigger)
- 八、HandlerMapping 組件
一、RESTful 風格
- 核心特點:將請求參數嵌入 URL 路徑中,通過 HTTP 方法(GET/POST/PUT/DELETE 等)表達操作語義,使接口設計更簡潔、規范。
- 參數傳遞方式:使用 URL 路徑占位符(如
/users/{id}
)傳遞參數,而非傳統的?key=value
形式。 - 示例:
- 獲取 ID 為 1 的用戶:
GET /users/1
(參數id=1
放在 URL 中) - 更新 ID 為 1 的用戶:
PUT /users/1
- 獲取 ID 為 1 的用戶:
二、Spring Boot 靜態資源處理
- 默認存放路徑:項目中
src/main/resources/static/
目錄(或public/
、resources/
目錄,優先級:resources > static > public
)。 - 訪問規則:
- 靜態資源可直接通過 URL 訪問,路徑為
/資源名
(無需包含static
前綴)。例如static/image/logo.png
可通過http://localhost:8080/image/logo.png
訪問。 - 靜態資源請求(
/static/**
路徑模式)會被 Spring Boot 內置的資源處理器直接處理,不會經過 Controller 或 HandlerMapping,避免與業務接口沖突。
- 靜態資源可直接通過 URL 訪問,路徑為
三、Spring Boot 首頁(歡迎頁)
- 默認規則:Spring Boot 會自動識別
src/main/resources/static/
或src/main/resources/public/
目錄下的index.html
文件作為首頁。 - 訪問方式:直接訪問應用根路徑(如
http://localhost:8080
)即可顯示該首頁。
四、@PathVariable 注解
- 作用:用于從 URL 路徑中獲取參數,配合 RESTful 風格使用。
- 示例:
@GetMapping("/users/{id}") public User getUser(@PathVariable Long id) {// id 的值從 URL 路徑中的 {id} 占位符獲取return userService.getUserById(id); }
- 注意:若參數名與路徑占位符名稱不一致,需指定
value
,如@PathVariable("userId") Long id
。
五、攔截器(Interceptor)
- 技術本質:基于 Spring MVC 的接口回調機制,用于在請求處理的預處理、后處理、完成后三個階段進行攔截操作(如登錄驗證、日志記錄)。
- 實現方式:
- 自定義類實現
HandlerInterceptor
接口,重寫preHandle
(預處理)、postHandle
(后處理)、afterCompletion
(完成后)方法。 - 通過
WebMvcConfigurer
配置類的addInterceptors
方法注冊攔截器,并指定攔截/排除的路徑。
- 自定義類實現
- 示例:
// 自定義攔截器 public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 預處理邏輯(如驗證登錄狀態)return true; // true 放行,false 攔截} }// 注冊攔截器 @Configuration public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") // 攔截所有路徑.excludePathPatterns("/login"); // 排除登錄路徑} }
六、過濾器(Filter)
- 技術定位:Java EE 規范中的 Web 三大組件(Servlet、Filter、Listener)之一,基于 Servlet 容器,在請求進入 Servlet 之前或響應返回客戶端之前進行過濾。
- 與攔截器的區別:
維度 過濾器(Filter) 攔截器(Interceptor) 技術依賴 依賴 Servlet 容器 依賴 Spring MVC 框架 攔截范圍 所有請求(包括靜態資源) 僅攔截 Spring MVC 處理的請求(Controller 方法) 執行時機 請求進入 Servlet 之前 Controller 方法調用前后 - 使用場景:字符編碼設置、跨域請求處理、敏感詞過濾等。
七、觸發器(Trigger)
- 技術定位:數據庫層面的機制,當數據庫發生指定操作(如 INSERT/UPDATE/DELETE)時,自動觸發預設的 SQL 邏輯。
- 特點:
- 運行在數據庫內部,與應用程序解耦。
- 項目中慎用:遷移數據庫時可能因語法差異(如 MySQL 與 Oracle 觸發器語法不同)導致兼容性問題,且邏輯隱藏在數據庫中,不利于維護。
八、HandlerMapping 組件
- 作用:Spring MVC 中用于 映射請求 URL 到具體的 Handler(如 Controller 方法) 的組件,負責解析請求路徑并找到對應的處理器。
- 常見實現類:
BeanNameUrlHandlerMapping
:根據 Bean 的名稱(以/
開頭)映射 URL,如 Bean 名稱為/user
,則處理http://localhost:8080/user
請求。RequestMappingHandlerMapping
(主流):解析@RequestMapping
及其派生注解(@GetMapping
、@PostMapping
等),實現 URL 與 Controller 方法的映射,支持復雜的路徑匹配和參數綁定。