在spring 3.0中,通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controller的bean,需要在spring-context配置文件中增加如下定义
<context:component-scan base-package="net.zhepu.web" />
1. @Controller 2. @RequestMapping("/helloworld") 3. public class Helloworld { 4. 5. @RequestMapping(method=RequestMethod.GET) 6. public ModelAndView hello() { 7. ModelAndView mv = new ModelAndView(); 8. mv.setViewName("helloworld"); 9. return mv; 10. } 11. }
定义multiaction controllers
使用一个controller来处理多个action,称为multiaction controller。@RequestMapping标注并不要求一定放在class定义之前,而可以直接作为一个method level的标注来使用,当这样使用时,contorller类就变成了一个multiaction controller,例如
1. @Controller 2. public class MultiactionHelloworld { 3. 4. @RequestMapping("/hello1") 5. public ModelAndView hello1(){ 6. ModelAndView mv = new ModelAndView(); 7. mv.setViewName("helloworld"); 8. return mv; 9. } 10. 11. @RequestMapping("/hello2") 12. public ModelAndView hello2(){ 13. ModelAndView mv = new ModelAndView(); 14. mv.setViewName("helloworld"); 15. return mv; 16. }
url template
@requestmapping参数中的url,除了常规的url外,也可以使用url template来定义形成类似REST请求的url。
例如
@RequestMapping("/urltemplate/{username}") public ModelAndView test1(@PathVariable String username){ ModelAndView mv = new ModelAndView(); mv.addObject("userName", username); System.out.println(username); mv.setViewName("test002"); return mv; }
以上通过@PathVariable将入参中的username和userid分别与请求url中的{username}和{userid}的值做绑定
@requestmapping的可选参数
value:表示需要匹配的url的格式。
method:表示所需处理请求的http 协议(如get,post,put,delete等),可选值为RequestMethod这个enum的值。
params:格式为”paramname=paramvalue” 或 “paramname!=paramvalue”。不带参数则表示paramvalue可以为任意值。
如params = {"param1=1","param2!=2","param3"},表示对应的url必须包括param1,param2,param3三个参数,其中param1的值必须为1,param2的值不能为2,param3的值可以为任意值。
headers:用来限定对应的reqeust请求的headers中必须包括的内容,例如
headers={"Connection=keep-alive"}, 表示请求头中的connection的值必须为keep-alive。