欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-14 15:09:04
...

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


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