Spring MVC框架通过扫描将带有@Controller的类中的@RequestMapping的方法进行映射,然后调用映射的方法处理请求,这个分发过程默认是由DispaterServlet处理的。
http请求映射原理
Spring MVC进行映射的依据
通过URL限定:URL表达式
Spring MVC的地址映射支持标准的URL,同时默认支持是ant风格的URL。列如:
URL | 说明 |
---|---|
/account/*/create | 匹配/account/aaa/create、/account/bbb/create等URL |
/account/**/create | 匹配/account/create、/account/aaa/bbb/create等URL |
/account/create?? | 匹配/account/createaa、/account/createbb等URL |
/account/{accountId} | 匹配account/123、account/abc等URL |
/account/**/{userId} | 匹配account/aaa/bbb/123、account/aaa/456等URL |
account/{accountId}/customer/{customerId}/detail | 匹配account/1234/customer/0000/detail等的URL |
通过URL限定:绑定路径中{xxx}的值
@RequestMapping("/{accountId}") public ModelAndView showDetail(@PathVariable("accountId")String accountId){ ModelAndView mav= new ModelAndView(); mav.setViewName("user/showDetail"); mav.addObject("user", userService.getUserById(userId)); return mav; }
URL中的{xxx}占位符可以通过@PathVariable(“xxx”)绑定到操作方法的入参中。
在3.X中如果@PathVariable不指定参数名,只有在编译时打开debug开关(javac -debug=no)时才可行!!(不建议),貌似4.x没有这个问题了。