Java Web之SpringMVC 進行引數繫結

YungFan發表於2017-12-13

MVC框架的學習方法

當需要學習一個新的MVC框架需要從以下方面入手:

1、環境搭建(能輸出Hello Word)
2、如何傳遞引數到Controller,Controller如何獲取引數
3、如何從Controller傳遞Model到View
4、如何完成檔案的上傳
5、如何完成驗證
6、異常的處理
7、深入學習一些原理和原始碼的學習

接下來分享一下如何傳遞引數到Controller,Controller如何獲取引數

SpringMVC如何進行引數繫結

一、什麼是控制器

在一個POJO類定義處標註@Controller,再通過 <context:component-scan /> 掃描響應的包,就可以使POJO類成為一個能處理HTTP請求的控制器

二、請求對映到控制器

用@RequestMapping,可以定義在類和方法上,將一個請求對映到控制器中的方法上。

三、幾種典型的處理請求的方法(Controller如何獲取請求引數)

1、請求的引數按名稱匹配的方式繫結到入參中,返回字串代表邏輯檢視名

@RequestMapping(value="/handle1")
public String handle1(@RequestParam("userName") String userName,
        @RequestParam("password") String password,
        @RequestParam("realName") String realName)
{
  ...
return success;
}
複製程式碼

@RequestParam 用來請求request中的引數,相當於request.getParameter() 其中有三個屬性:

  • value用來指定要取得引數的key;
  • required 所取的引數是否必須存在,如果true表示必須存在,若不存在則丟擲異常;
  • default 指定該value的預設值。

這一種方式說明引數是URL的一部分,此時也可以去掉@RequestParam,直接寫引數就可以了 public String handle1(String userName, String password, String realName)

2、將cookie的值及報文頭部屬性繫結到入參,方法返回ModelAndView

@RequestMapping(value="/handle2")
public ModelAndView handle2(@CookieValue("JSESSIONID") String sessionId,
       @RequestHeader("Accept-Language") String accpetLanguage)
{
       ModelAndView mav = new ModelAndView();
       mav.setViewName("success");
       mav.addObject("user", new User());
       return mav;
}
複製程式碼

3、請求的引數按名稱匹配的方式繫結到 user 屬性中,返回字串代表邏輯檢視名

@RequestMapping(value="/handle3")
public String handle3(User user)
{
  ...
return success;
}
複製程式碼

按“HTTP請求引數名= 命令/表單物件的屬性名”的規則,自動繫結請求資料,自動進行基本型別資料轉換

4、直接使用Servlet API 物件作為處理方法的入參,返回字串代表邏輯檢視名

@RequestMapping(value="/handle4")
public String handle4(HttpServletRequest request)
{
  ...
return success;
}

複製程式碼

5、以REST技術向springMVC傳遞引數使用佔位符

public ModelAndView show(@PathVariable("userid") String userid)
{
       ModelAndView mav = new ModelAndView();
       mav.setViewName("success");
       mav.addObject("user", new User());
       return mav;
}
複製程式碼

用@PathVariable來把佔位符引數繫結到控制器處理方法的入參中 注意:佔位符中的{xxx}要和@PathVariable("xxx")的名字一樣

6、還可以使用一些其他的引數,如IO流等

相關文章