DispatcherServlet接受一个web请求之后,将请求发送给@Controller注解声明的不同控制器类。
这个调度过程依赖控制器类及其处理程序方法中声明的各种@RequestMapping注解。
Spring MVC中,web请求通过控制器类中声明的一个或者多个@RequestMapping注解映射到处理程序。
处理程序映射根据与上下文路径(Web应用上下文路径)和servlet路径(映射到DispatcherServlet的路径)的相对路径匹配URL。
使用@RequestMapping注解的最简单的策略是直接修饰处理程序方法。为此需要用包含URL模式的@RequestMapping注解声明每个处理程序方法。
如果方法的@RequestMapping注解匹配请求的URL,DispatcherServlet将请求发往这个方法处理。
@Controller
控制类
@Autowired
控制反转生成控制类的实例
@RequestMapping("/member/add")
方法1
@RequestMapping(value={"/member/remove", "/member/delete"}, method=RequestMethod.GET)
方法2
另外一种
@Controller
@RequestMapping("/member/*")
控制类
@Autowired
控制反转生成控制类的实例
@RequestMapping("add")
方法1
@RequestMapping(value={"remove","delete"}, method=RequestMethod.GET)
方法二
@RequestMapping("display/{user}")
方法三(@RequestParam("memberName") String memberName, @PathVariable("user") String user)
@RequestMapping
方法四
方法五
对于方法三,如果接受的请求形式为/member/display/jdoe,方法将以jdoe值访问user变量
对于方法四使用了@RequestMapping注解,但是缺少URL值,因为类级别使用了/member/* URL通配符,这个处理方法作为全能的方法执行。
任何URL请求(例如/member/abcdefg或/member/randomrout)都会触发这个方法。
最后一个方法没有@RequestMapping注解,意味着这个方法是一个工具,对于Spring MVC没有影响。
按照HTTP请求类型映射请求
默认情况下,@RequestMapping注解假定所有的入站请求为HTTP GET类型。但是当入站请求是另一种HTTP类型,就有必要在@RequestMapping注解中明确指定的类型。
@RequestMapping (method = RequestMethod.POST)
public String submitForm (@ModelAttribute ("member") Member member, BindingResult result, Model model) {
……
}