利用context:component-scan去掃描package以下的所有@Controller,
那要如何將USER傳送的request對應到符合的控制器,
便是依賴@RequestMapping,
有以下幾種方式可以使用:
1.利用URL對應
可以在function前利用@RequestMapping來對應傳送的URL,
假設你的webapp名稱為springmvc,
那當你呼叫/springmvc/account/create時,
便會執行下列AccountController的create(),
package com.springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class AccountController { @RequestMapping("/account/create") public String create() { return "account/create"; } }除此之外,你也可以在class的地方設定@RequestMapping,
以下面UserController為例,
當你呼叫/springmvc/user/login,
就會執行login(),
package com.springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/login") public String login() { return "user/login"; } }通常建議在@Controller的class增加設定@RequestMapping,
這樣在URL對應時,
便可以很快知道要對應User的@Controller,
然後尋找底下的login()。
2.透過RequestMethod、param、header來對應
可以透過HTTP的請求方法,
如GET、POST、DELETE、PUT、TRACE....等等,
或者是參數和標頭來尋找對應@Controller及@RequestMapping,
可參考下面的例子:
package com.springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/car") public class CarController { @RequestMapping(value = "/create", method = RequestMethod.POST) public String create() { return "/car/create"; } @RequestMapping(value = "/update", params = "carNo") public String update() { return "/car/update"; } @RequestMapping(value = "/delete", headers="Content-Type=text/plain") public String delete() { return "/car/delete"; } }其中關於params參數及headers的設定,
有一些可以使用的方式如下:
params="carNo":請求參數必須包含名為carNo的參數
params="!carNo":請求參數不能有包含名為carNo的參數
params="carNo!=123":請求參數必須包含名為carNo的參數,但值不可為123
params={"carNo=123","carBand"}:請求參數必須包含名為carNo及carBand的參數,
其中carNo的值必須為123
headers的使用方式如同上述params。
沒有留言:
張貼留言