首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 入門(一):架構概覽與 @RequestMapping 多維映射詳解

     編輯:Java 綜合教學

Spring MVC 請求處理流程

  1. DispatcherServlet 攔截請求。
  2. HandlerMapping 根據 URL 找到 Controller(Handler)。
  3. HandlerAdapter 執行 Controller 方法。
  4. Controller 返回 ModelAndView 或視圖名。
  5. ViewResolver 解析邏輯視圖名為具體 View。
  6. View 渲染模型數據,輸出響應。

Controller 定義範例

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping(value = "/register")
    public String register() {
        return "user/register"; // 邏輯視圖名
    }
}
  • 類級 @RequestMapping 定義基礎路徑前綴。
  • 方法級 @RequestMapping 定義相對路徑,組合成完整映射 /user/register。

@RequestMapping 三大映射維度

1. URL 路徑表達式(Ant 風格 + 佔位符)

模式匹配示例說明
/user/*/create/user/aaa/create, /user/bbb/create* 匹配單層路徑
/user/**/create/user/create, /user/aaa/bbb/create** 匹配任意層路徑
/user/create??/user/createaa, /user/createbb? 匹配單字符
/user/{userId}/user/123, /user/abc佔位符綁定 @PathVariable
/company/{companyId}/user/{userId}/detail/company/123/user/456/detail多佔位符

佔位符綁定

@RequestMapping("/{userId}")
public ModelAndView showDetail(@PathVariable("userId") String userId) {
    ModelAndView mav = new ModelAndView("user/showDetail");
    mav.addObject("user", userService.getUserById(userId));
    return mav;
}

若 @PathVariable 不指定名稱,**必須編譯時保留參數名**(javac -parameters 或 -g),否則運行時報錯,不建議省略。

2. HTTP 方法限定

@RequestMapping(value="/delete", method=RequestMethod.POST)
public String delete(@RequestParam("userId") String userId) { ... }
  • GET:冪等、可緩存、僅查詢。
  • POST:非冪等、創建資源。
  • PUT:冪等、全量更新或創建。
  • DELETE:冪等、刪除資源。

同一 URL 不同 Method 可映射到不同處理方法,實現 RESTful 風格。

3. 請求參數 / Header 條件映射

// 必須包含 userId 參數
@RequestMapping(value="/delete", params="userId")
public String delete(@RequestParam("userId") String userId) { ... }

// 僅接受 Content-Type 為 text/* 的請求
@RequestMapping(value="/show", headers="content-type=text/*")
public String show() { ... }

params / headers 表達式語法

表達式含義
param1必須包含參數 param1
!param1不得包含參數 param1
param1!=value1包含 param1 但值不等於 value1
{"param1=value1","param2"}同時滿足 param1=value1 且包含 param2

headers 同理,針對請求頭字段匹配。

總結

Spring MVC 透過 @RequestMapping 的組合條件(URL、Method、Params、Headers)實現極其靈活的請求分發,支援 RESTful、傳統表單、AJAX 等多種交互風格,掌握三大維度組合技巧是高效開發 Controller 的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved