1.请求处理方法签名
Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应参数中。
• Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。
• 必要时可以对方法及方法参数标注相应的注解(@PathVariable、@RequestParam、@RequestHeader 等)、Spring
MVC 框架会将 HTTP 请求的信息绑定到相应的方法参数中,并根据方法的返回值类型做出相应的后续处理。
2.使用 @RequestParam 绑定请求参数值
• 在处理方法的参数处使用 @RequestParam 可以把请求参数传递给请求方法(表单数据)
– value:参数名,注意:一般方法的参数设置为 包装类或类 类型的,不然当required=false时,若是用基本类型则在网页会抛出500,除非设置参数的默认值
– required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
– defaultValue:设置参数默认值,如果想要用基本类型的,最好设置一下默认值
• 例子:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class Parameter {
@RequestMapping("/testParameter")
public String testParameter(@RequestParam("username") String username,
@RequestParam("age") Integer age){
System.out.println("testParameter -> username = " + username + ", age = " + age);
return "success";
}
}
jsp文件:
<a href="/testParameter?username=zhou&age=10">Test Parameter</a>
额外:当遇到value值设置为基本类型的值,并且设置required=false的话并没有设置参数默认值,则当缺少该参数时访问页面则会报错:HTTP Status 500 - Request processing failed
3. 使用 @RequestHeader 绑定请求报头的属性值(了解)
• 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的参数中
• 例子:
@RequestMapping("/testHeaders")
public String testHeaders(@RequestHeader("User-Agent") String agent){
System.out.println("Header:");
System.out.println("User-Agent:" + agent);
return "success";
}
jsp文件:
<a href="/testHeaders">Test Headers</a>
4.使用 @CookieValue 绑定请求中的 Cookie 值(了解)
• @CookieValue 可让处理方法的参数绑定某个 Cookie 值
• 例子:
@RequestMapping("/testCookieValue")
public String testCookieVaule(@CookieValue("JSESSIONID") String js){
System.out.println("JSESSIONID = " + js);
return "success";
}
jsp文件:
<a href="/testCookieValue">Test CookieValue</a>
5. 使用 POJO 对象绑定请求参数值(重要)
• 比如提交表单时,如果对于每一个表单值都用一个@RequestParam去映射的话很麻烦,所以就出现了使用对象来映射表单的数据
• Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。
如:dept.deptId、dept.address.tel 等
• 例子:
@RequestMapping("/testPOJO")
public String testPOJO(User user){ // 会直接匹配,不需要使用@RequestParam
System.out.println(user);
return "success";
}
jsp文件:
<form action="/testPOJO" method="post">
username: <input type="text" name="username">
<br/>
password: <input type="password" name="password">
<br/>
age: <input type="text" name="age">
<br/>
city: <input type="text" name="Address.city">
<br/>
province: <input type="text" name="Address.province">
<br/>
<input type="submit" value="submit">
</form>
然后需要根据表单创建类:
public class User {
private String username;
private String password;
private Integer age;
private Address address;
Get and Set Method
toString()
}
public class Address {
private String city;
private String province;
Get and Set Method
toString()
}
6. 使用 Servlet 原生的 API 作为方法的参数(用到)
MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数
• HttpServletRequest
• HttpServletResponse
• HttpSession
• java.security.Principal
• Locale
• InputStream
• OutputStream
• Reader
• Writer