个人学习参考所用,勿喷!
2.控制器和URL映射描述。
DispatcherServlet作为Spring MVC的入口在接受到一个web请求的时候,会根据应用发布时候所扫描到的控制器和URL之间的映射来选择不同的目的处理函数。这个过程依靠的是控制器类和其处理方法中声明的各种格式的@RequestMapping主机来控制的。@RequestMapping是定义请求映射策略的注解。
2.1) 按照方法匹配请求。@RequestMapping注解简单的时候就是直接修饰在每个处理程序方法:
@Controller
public class MemberController {
private MemberService memberService;
// Wire service in constructor, available in application context
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
// 程序方法映射到URL "/member/add",使用默认GET方法。
@RequestMapping("/member/add")
public String addMember(Model model) {
model.addAttribute("member", new Member());
model.addAttribute("guests", memberService.list());
// Return view memberList. Via resolver the view
// will be mapped to /WEB-INF/jsp/memberList.jsp
return "memberList";
}
// 程序方法映射到 URL "/member/remove" 或者 "/member/delete", 明确指定使用GET方法
@RequestMapping(value={"/member/remove","/member/delete"},method=RequestMethod.GET)
public String removeMember(@RequestParam("memberName") String memberName) {
memberService.remove(memberName);
return "redirect:";
}
}
这个理要需要注意的是第二种用法中,@RequestMapping的value可以映射到多个URL。
2.2)按照类映射请求。@RequestMapping注解也可以修饰控制器类。可以使得控制器方法不需要再使用指定@RequestMapping的value值,或者用来使控制器的方法的@RequestMapping注解实现更细粒度的URL。@RequestMapping同时也支持广泛意义上的“*”通配符。
@Controller
// Bind controller to all URLs under/member/*
// initial view will be resolved to the name returned in the default GET method
@RequestMapping("/member/*")
public class MemberController {
// 程序方法映射到URL "/member/add",使用默认GET方法。
@RequestMapping("add")
public String addMember(Model model) {
...
}
// 程序方法映射到 URL "/member/remove" 或者 "/member/delete", 明确指定使用GET方法
@RequestMapping(value={"remove","delete"},method=RequestMethod.GET)
public String removeMember(@RequestParam("memberName") String memberName) {
....
}
// 程序方法映射到 URL "/member/display/{user}", 这里的user是必选的REST风格的{path_variable}参数
@RequestMapping(value="display/{user}",method=RequestMethod.GET)
public String displayMember(@PathVariable("user") String user) {
....
}
// 全能方法,处理 URL "/member/*" 映射,使用默认GET方法。
// void类型返回值将指向方法的同名视图(memberList)
@RequestMapping
public void memberList() {
...
}
//相当于一个工具方法,对MVC没有影响
public void memberLogic() {
...
}
}
2.3)按照HTTP请求类型映射请求。默认情况下@RequestMapping假定请求是HTTP GET类型。如果不是那么就需要明确说明:
@Controller
@RequestMapping("/member/*")
public class MemberController {
// 程序方法映射到URL "/member/*",使用HTTP POST方法。
@RequestMapping(method=RequestMethod.GET)
public String addMember(Model model) {
...
}
// 程序方法映射到URL "/member/remove",使用HTTP POST方法。
@RequestMapping("remove",method=RequestMethod.POST)
public String removeMember(Model model) {
...
}
}
参考:
juyon的blog:《spring3 MVC国际化支持之中文乱码》
Gary Mark等的书籍:《Spring Recipes》2ed