Spring3 MVC的最佳实践和理解(2)
程序员文章站
2022-03-31 12:28:01
...
个人学习参考所用,勿喷!
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
下一篇: ThreadLocal