2.1使用 @RequestMapping 映射請求
- Spring MVC 使用 **@RequestMapping **注解為控制器指定可以處理哪些 URL 請求
- 在控制器的類定義及方法定義處都可標(biāo)注@RequestMapping
- 類定義處:提供初步的請求映射信息。相對于 WEB 應(yīng)用的根目。
- 方法處:提供進(jìn)一步的細(xì)分映射信息。相對于類定義處的 URL。若類定義處未標(biāo)注 @RequestMapping,則方法處標(biāo)記的 URL 相對于WEB 應(yīng)用的根目錄
- DispatcherServlet 截獲請求后,就通過控制器上@RequestMapping 提供的映射信息確定請求所對應(yīng)的處理方法。
2.1.1測試@ResquestMapping
SpringMVCTest.java
package com.atguigu.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS="success";
@RequestMapping("/testRequestMapping")
public String testRequestMapping()
{
System.out.println("testRequestMapping");
return SUCCESS;
}
}
2.1.2index.jsp中的寫法
index.jsp
<body>
<a href="springmvc/testRequestMapping">Test RequestMapping</a>
</body>
2.2映射請求參數(shù)、請求方法或請求頭
- @RequestMapping 除了可以使用請求 **URL **映射請求外,還可以使用請求方法、請求參數(shù)及請求頭映射請求
- @RequestMapping 的 value、method、params 及 heads分別表示請求 URL、請求方法、請求參數(shù)及請求頭的映射條件,他們之間是與的關(guān)系,聯(lián)合使用多個條件可讓請求映射更加精確化。
- params 和 headers支持簡單的表達(dá)式:
- param1: 表示請求必須包含名為 param1 的請求參數(shù)
- !param1: 表示請求不能包含名為 param1 的請求參數(shù)
- param1 != value1: 表示請求包含名為 param1 的請求參數(shù),但其值不能為 value1
- {“param1=value1”, “param2”}: 請求必須包含名為 param1 和param2的兩個請求參數(shù)數(shù),且 param1 參數(shù)的值必須為 value1
2.2.1@RequestMapping中使用Method屬性
SpringMVCTest.java
package com.atguigu.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS="success";
@RequestMapping("/testRequestMapping")
public String testRequestMapping()
{
System.out.println("testRequestMapping");
return SUCCESS;
}
//使用Method屬性來指定請求方式
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod()
{
System.out.println("testMethod");
return SUCCESS;
}
}
2.2.2在index.jsp中測試
index.jsp
<!--因?yàn)锧RequestMapping中的method屬性指定的是POST,所以不能使用get請求-->
<form action="springmvc/testMethod" method="POST">
<input type="submit" value="submit"/>
</form>
2.2.3@RequestMapping中指定params和heads屬性
SpringMVCTest.java
package com.atguigu.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS="success";
@RequestMapping("/testRequestMapping")
public String testRequestMapping()
{
System.out.println("testRequestMapping");
return SUCCESS;
}
//使用Method屬性來指定請求方式
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod()
{
System.out.println("testMethod");
return SUCCESS;
}
//可以使用params和headers來更加精確地映射請求,params和headers支持簡單的表達(dá)式
@RequestMapping(value="/testParamsAndHeaders",
params={"username","age!=10"}, headers={"Accept-Language=zh-CN,zh;q=0.8"})
public String testParamsAndHeaders()
{
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
}
2.2.4index.jsp中測試
index.jsp
<a href="springmvc/testParamsAndHeaders?username=zhangsan&age=11">testParamsAndHeaders</a>
瀏覽器中:
http://localhost:8080/springmvc-1/springmvc/testParamsAndHeaders?username=zhangsan&age=11
2.3@RequestMapping支持Ant風(fēng)格的URL
**Ant **風(fēng)格資源地址支持 **3 **種匹配符:
- ?:匹配文件名中的一個字符
- *:匹配文件名中的任意字符
- : 匹配多層路徑
@RequestMapping 還支持 **Ant **風(fēng)格的 URL:
- /user/*/createUser: 匹配/user/aaa/createUser、/user/bbb/createUser 等 URL
- /user/**/createUser: 匹配/user/createUser、/user/aaa/bbb/createUser 等 URL
- /user/createUser??: 匹配/user/createUseraa、/user/createUser**bb **等 URL
2.3.1@RequestMapping中指定Ant格式的屬性
SpringMVCTest.java
package com.atguigu.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest {
private static final String SUCCESS="success";
@RequestMapping("/testRequestMapping")
public String testRequestMapping()
{
System.out.println("testRequestMapping");
return SUCCESS;
}
//使用Method屬性來指定請求方式
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod()
{
System.out.println("testMethod");
return SUCCESS;
}
//可以使用params和headers來更加精確地映射請求,params和headers支持簡單的表達(dá)式
@RequestMapping(value="testParamsAndHeaders",
params={"username","age!=10"}, headers={"Accept-Language=zh-CN,zh;q=0.8"})
public String testParamsAndHeaders()
{
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
@RequestMapping("/testAntPath/*/abc")
public String testAntPath()
{
System.out.println("testAntPath");
return SUCCESS;
}
}
2.3.2index.jsp中進(jìn)行測試
index.jsp
<a href="springmvc/tetAntPath/fdsagfdas/abc">TestAntPath</a>