Spring3 MVC的最佳实践和理解(2)

个人学习参考所用,勿喷! 


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

猜你喜欢

转载自kingxss.iteye.com/blog/1496968
今日推荐