1. 程式人生 > 其它 >Spring MVC傳遞引數

Spring MVC傳遞引數

Spring MVC Controller 接收請求引數的方式有很多種,有的適合 get 請求方式,有的適合 post 請求方式,有的兩者都適合。主要有以下幾種方式:
  • 通過實體 Bean 接收請求引數
  • 通過處理方法的形參接收請求引數
  • 通過 HttpServletRequest 接收請求引數
  • 通過 @PathVariable 接收 URL 中的請求引數
  • 通過 @RequestParam 接收請求引數
  • 通過 @ModelAttribute 接收請求引數

下面分別介紹這些方式,可以根據實際情況選擇合適的接收方式。

通過實體Bean接收請求引數

實體 Bean 接收請求引數適用於 get 和 post 提交請求方式。需要注意,Bean 的屬性名稱必須與請求引數名稱相同。示例程式碼如下。
@RequestMapping("/login")
public
String login(User user, Model model) { if ("bianchengbang".equals(user.getName()) && "123456".equals(user.getPwd())) { model.addAttribute("message", "登入成功"); return "main"; // 登入成功,跳轉到 main.jsp } else { model.addAttribute("message", "使用者名稱或密碼錯誤");
return "login"; } }

通過處理方法的形參接收請求引數

通過處理方法的形參接收請求引數就是直接把表單引數寫在控制器類相應方法的形參中,即形參名稱與請求引數名稱完全相同。該接收引數方式適用於 get 和 post 提交請求方式。示例程式碼如下:
@RequestMapping("/login")
public String login(String name, String pwd, Model model) {
    if ("bianchengbang".equals(user.getName())
            && "123456".equals(user.getPwd())) {
       
        model.addAttribute("message", "登入成功");
        return "main"; // 登入成功,跳轉到 main.jsp
    } else {
        model.addAttribute("message", "使用者名稱或密碼錯誤");
        return "login";
    }
}

通過HttpServletRequest接收請求引數

通過 HttpServletRequest 接收請求引數適用於 get 和 post 提交請求方式,示例程式碼如下:
@RequestMapping("/login")
public String login(HttpServletRequest request, Model model) {
    String name = request.getParameter("name");
    String pwd = request.getParameter("pwd");
   
    if ("bianchengbang".equals(name)
            && "123456".equals(pwd)) {
       
        model.addAttribute("message", "登入成功");
        return "main"; // 登入成功,跳轉到 main.jsp
    } else {
        model.addAttribute("message", "使用者名稱或密碼錯誤");
        return "login";
    }
}

通過@PathVariable接收URL中的請求引數

通過 @PathVariable 獲取 URL 中的引數,示例程式碼如下。
@RequestMapping("/login/{name}/{pwd}")
public String login(@PathVariable String name, @PathVariable String pwd, Model model) {
   
    if ("bianchengbang".equals(name)
            && "123456".equals(pwd)) {
       
        model.addAttribute("message", "登入成功");
        return "main"; // 登入成功,跳轉到 main.jsp
    } else {
        model.addAttribute("message", "使用者名稱或密碼錯誤");
        return "login";
    }
}
在訪問“http://localhost:8080/springMVCDemo02/user/register/bianchengbang/123456”路徑時,上述程式碼會自動將 URL 中的模板變數 {name} 和 {pwd} 繫結到通過 @PathVariable 註解的同名引數上,即 name=bianchengbang、pwd=123456。

通過@RequestParam接收請求引數

在方法入參處使用 @RequestParam 註解指定其對應的請求引數。@RequestParam 有以下三個引數:
  • value:引數名
  • required:是否必須,預設為 true,表示請求中必須包含對應的引數名,若不存在將丟擲異常
  • defaultValue:引數預設值

通過 @RequestParam 接收請求引數適用於 get 和 post 提交請求方式,示例程式碼如下。
@RequestMapping("/login")
public String login(@RequestParam String name, @RequestParam String pwd, Model model) {
   
    if ("bianchengbang".equals(name)
            && "123456".equals(pwd)) {
       
        model.addAttribute("message", "登入成功");
        return "main"; // 登入成功,跳轉到 main.jsp
    } else {
        model.addAttribute("message", "使用者名稱或密碼錯誤");
        return "login";
    }
}
該方式與“通過處理方法的形參接收請求引數”部分的區別如下:當請求引數與接收引數名不一致時,“通過處理方法的形參接收請求引數”不會報 404 錯誤,而“通過 @RequestParam 接收請求引數”會報 404 錯誤。

通過@ModelAttribute接收請求引數

@ModelAttribute 註解用於將多個請求引數封裝到一個實體物件中,從而簡化資料繫結流程,而且自動暴露為模型資料,在檢視頁面展示時使用。

而“通過實體 Bean 接收請求引數”中只是將多個請求引數封裝到一個實體物件,並不能暴露為模型資料(需要使用 model.addAttribute 語句才能暴露為模型資料,資料繫結與模型資料展示後面教程中會講解)。

通過 @ModelAttribute 註解接收請求引數適用於 get 和 post 提交請求方式,示例程式碼如下。
@RequestMapping("/login")
public String login(@ModelAttribute("user") User user, Model model) {
   
    if ("bianchengbang".equals(name)
            && "123456".equals(pwd)) {
       
        model.addAttribute("message", "登入成功");
        return "main"; // 登入成功,跳轉到 main.jsp
    } else {
        model.addAttribute("message", "使用者名稱或密碼錯誤");
        return "login";
    }
}
FROM http://c.biancheng.net/spring_mvc/pass-param.html