原文:http://www.cnblogs.com/liukemng/p/3726897.ht
1.URL路徑映射
1.1.對一個action配置多個URL映射:
我們把上一篇中的HelloWorldController的index() action方法的@RequestMapping更改為@RequestMapping(value={"/index", "/hello"}, method = {RequestMethod.GET}),這表示對該action配置了/index和/hello兩個映射。運作測試,如下:
可以看到/helloworld/hello請求也成功比對。
1.2.URL請求參數映射:
這在查詢的時候經常用到,比如我們根據id或編号來擷取某一條記錄。
在HelloWorldController添加一個getDetail的action,代碼如下:
@RequestMapping(value="/detail/{id}", method = {RequestMethod.GET})
public ModelAndView getDetail(@PathVariable(value="id") Integer id){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("id", id);
modelAndView.setViewName("detail");
return modelAndView;
}
其中value="/detail/{id}",中的{id}為占位符表示可以映射請求為/detail/xxxx 的URL如:/detail/123等。
方法的參數@PathVariable(value="id") Integer id 用于将URL中占位符所對應變量映射到參數id上,@PathVariable(value="id") 中value的值要和占位符/{id}大括号中的值一緻。
在views中添加detail.jsp視圖,用于将擷取到的id值展示出來。視圖内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${id}
</body>
</html>
運作測試,請求URL位址 http://localhost:8080/SpringMVCLesson/helloworld/detail/123 ,結果如下:
可以看到已經正确的顯示了我們請求的id。
1.3.URL通配符映射:
我們還可以通過通配符對URL映射進行配置,通配符有“?”和“*”兩個字元。其中“?”表示1個字元,“*”表示比對多個字元,“**”表示比對0個或多個路徑。
例如:
“/helloworld/index?”可以比對“/helloworld/indexA”、“/helloworld/indexB”,但不能比對“/helloworld/index”也不能比對“/helloworld/indexAA”;
“/helloworld/index*”可以比對“/helloworld/index”、“/helloworld/indexA”、“/helloworld/indexAA”但不能比對“/helloworld/index/A”;
“/helloworld/index/*”可以比對“/helloworld/index/”、“/helloworld/index/A”、“/helloworld/index/AA”、“/helloworld/index/AB”但不能比對 “/helloworld/index”、“/helloworld/index/A/B”;
“/helloworld/index/**”可以比對“/helloworld/index/”下的多有子路徑,比如:“/helloworld/index/A/B/C/D”;
如果現在有“/helloworld/index”和“/helloworld/*”,如果請求位址為“/helloworld/index”那麼将如何比對?Spring MVC會按照最長比對優先原則(即和映射配置中哪個比對的最多)來比對,是以會比對“/helloworld/index”,下面來做測試:
在HelloWorldController添加一個urlTest的action,内容如下:
@RequestMapping(value="/*", method = {RequestMethod.GET})
public ModelAndView urlTest(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("urltest");
return modelAndView;
}
在views檔案夾中新加一個視圖urltest.jsp,為了和index.jsp做差別urltest.jsp的内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
urlTest!
</body>
</html>
請求http://localhost:8080/SpringMVCLesson/helloworld/index檢視結果:
可以看出映射的是index對應的action。
請求http://localhost:8080/SpringMVCLesson/helloworld/AAA檢視結果:
可以看出映射的是urlTest對應的action。
本人親測代碼:
@Controller
@RequestMapping("/helloworld")
public class HelloWorldContrloller {
//一個action比對多個URL路徑
@RequestMapping(value={"/index","/hello"},method=RequestMethod.GET)
public String hello(String username,Model model){
System.out.println("//"+username);
model.addAttribute("hello111", "Hello:"+username);//username比對jsp頁input文本框的name值
return "success";
}
//通配符
@RequestMapping(value="/detail/{id}",method=RequestMethod.GET)
public String getDetail(@PathVariable(value="id") Integer id,Model model){
model.addAttribute("id", id);
return "detail";
}
}
轉載于:https://www.cnblogs.com/yunqing/p/6247545.html