1. 使用 @RequestMapping 來進行 URL 和 類 及 方法之間的映照。
2. @RequestMapping 注解可以標識到類上面,也能夠標識到方法上
1). 若類上面沒有標識,則方法上面的直接相對 WEB 利用的根目錄
< a href ="helloworld?name=springMVC">Hello
SpringMVC </a>
2). 若類上面有 @RequestMapping 標識,則類上面的 @RequestMapping 的 / 為相對 WEB 利用的根目錄,而方法上的 / 相對類上面的路徑
@RequestMapping("/springmvc" )
@Controller
public class SpringMVCTest
{
@RequestMapping("/testRedirect" )
public String
testRedirect(){
System. out.println("testRedirect" );
return "redirect:/index.jsp" ;
}
→< a href ="springmvc/testRedirect">Test
Redirect </a>
3. @RequestMapping 提供了足夠精細的映照細節
URL,要求方式,是不是包括甚么參數,參數值是不是等于已定義好的值,包括要求頭...
1). 映照 URL:使用 @RequestMapping 的 value 屬性
2). 映照要求方式:使用 @RequestMapping 的 method 屬性
示例:
@RequestMapping(value="/testRequestMapping2" ,
method=RequestMethod. POST,params={"name" ,"age=12" })
public String testRequestMapping2(){
System. out.println("testRequestMapping2" );
return SUCCESS ;
}
@RequestMapping("/testRequestHeader" )
public String testRequestHeader(@RequestHeader (value="Accept-Language" )
String al,
@RequestParam("age" ) int age, @CookieValue("JSESSIONID" )
String jid){
System. out.println("Accept-Language:
" + al + ", age: " + age + ", JSESSIONID: " + jid);
return SUCCESS ;
}
4.★在目標方法中如何得到要求參數 ?
1). 使用注解:@RequestParam 或 @PathVariable。
①. @RequestParam:用于映照要求參數。
@RequestParam(value="age", required=false) int age:把 age 這個要求參數賦給 age 這個入 參,且該要求參數不是必須的!
required 默許為 true,即若沒有這個要求參數,則 SpringMVC 會拋出異常
@RequestMapping(value= "testRequestParam")
public String testRequestParam(@RequestParam (value="username" ,required=false)
String un){
System. out.println("username: " +
un);
return SUCCESS ;
}
②. @PathVariable:可以將 URL 中占位符參數綁定到控制器處理方法的入參中。
URL 中的 {xxx} 占位符可以通過 @PathVariable("xxx") 綁定到操作方法的入參中。
@RequestMapping( "/testRequestMappingPathVariable/{id}" )
public String testPathVariable( @PathVariable("id" )
Integer id){
System. out.println("testRequestMappingPathVariable:
" + id);
return SUCCESS ;
}
2). 直接使用類:直接在入參中使用自定義的類作為方法的入參。
適用于表單要求,把表單參數直接映照到對象的屬性上
------------------------------Action------------------------------------------------------------
@RequestMapping("/testPojo")
public String testPojo(User user){
System. out.println("user: " + user);
return SUCCESS ;
}
---------------------------頁面要求--------------------------------------------------
<form action= "springmvc/testPojo" method ="POST">
username: <input type= "text" name ="username"/>
<br>
age: <input type= "text" name ="age"/>
<br>
email: <input type= "text" name ="email"/>
<br>
<input type= "submit" value ="Test
Pojo"/>
</form >
---------------------------------POJO---------------------------------------------------
public class User
{
private Integer id;
private String username;
private String email;
private int age ;
5. 如果需要可使用 ServletAPI:request, response, session 作為方法的入參
@RequestMapping("/testServletAPI" )
public String testServletAPI(HttpServletRequest request, HttpServletResponse
response,
HttpSession session, Reader reader) throws IOException{
System. out.println(request);
System. out.println(response);
System. out.println(session);
System. out.println(request.getReader() == reader); //true
return SUCCESS ;
}
6. 使用 IO 作為入參:Servlet 的 ServletRequest 具有 getInputStream() 和 getReader() 的方法,可以通過它們讀取要求信息。相應 Servlet 的 ServletResponse 的 getOuputStream() 和
getWriter() 方法,可以通過它們輸出響應信息。
@RequestMapping("/testWriter" )
public void testWriter(Writer
out) throws IOException{
out.write( "Hello~");
}