请求数据 : 请求参数 cookie信息 请求头信息…..
JavaWEB : HttpServletRequest
Request.getParameter(参数名); Request.getParameterMap();
Request.getCookies();
Request.getHeader();
Spring
1、请求处理方法签名
1) Spring MVC 通过分析处理方法的签名(方法名+ 参数列表),HTTP请 求信息绑定到处理方法的相应形参中。
2) Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。
3) 必要时可以对方法及方法入参标注相应的注解( @PathVariable 、@RequestParam、@RequestHeader 等)、
4) Spring MVC 框架会将 HTTP 请求的信息绑定到相应的方法形参中,并根据方法的返回值类型做出相应的后续处理。
2、@RequestParam注解
在处理请求的方法中,加入相对应的形参,保证形参参数名和传递的数据的参数名保持一致,就可以自动赋值。当需要变动变量名或者设置默认值时,采用@RequestParam
1)在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
2)value:参数名。当不满足赋值条件时,可以使用value属性,指定映射关系
3)required:设置形参是否必须被赋值,默认为true,必须赋值,若设置为false,则不必须赋值,因此形参的值为null
4)defaultValue: 默认值,若形参所获得的值为null,则设置一个默认值,用在分页和模糊查询中
@RequestMapping(value="/param", method=RequestMethod.POST) public String param(@RequestParam(value="username", required=false, defaultValue="1")String name, String password, String age) { System.out.println("username="+name+",password="+password+",age="+age); return "success"; }
<!--测试 请求参数 @RequestParam 注解使用 --> <a href="springmvc/testRequestParam?username=kkzhang&password=123456&age=10">testRequestParam</a>
3、 @RequestHeader 注解
1) 使用 @RequestHeader 绑定请求报头的属性值
2) 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
/** * @RequestHeader:在处理请求的方法上,获取请求头信息,用法和@RequestParam一致 */ @RequestMapping(value="/param", method=RequestMethod.POST) public String param(@RequestHeader("Accept-Language")String AcceptLanguage) { System.out.println("AcceptLanguage="+AcceptLanguage); return "success"; }
4、 @CookieValue 注解
1) 使用 @CookieValue 绑定请求中的 Cookie 值
2) @CookieValue 可让处理方法入参绑定某个 Cookie 值
/** * @CookieValue:在处理请求的方法上,获取cookie信息,用法和@RequestParam一致 */ @RequestMapping(value="/param", method=RequestMethod.POST) public String param(@CookieValue(value="JSESSIONID")String JSESSIONID) { System.out.println("JSESSIONID="+JSESSIONID); return "success"; }
5、使用POJO作为参数
1) 使用 POJO 对象绑定请求参数值
2) Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId、dept.address.tel 等
/** * 可以使用POJO获取客户端数据,要求实体类对象中的属性名一定要和页面中表单元素的name属性值一致,且支持级联关系 * */ @RequestMapping(value="/param", method=RequestMethod.POST) public String param(User user) { String username = request.getParameter("username"); System.out.println(user); return "success"; }
<form action="param" method="post"> username:<input type="text" name="username" /><br /> password:<input type="text" name="password" /><br /> age:<input type="text" name="age" /><br /> province:<input type="text" name="address.province" /><br /> city:<input type="text" name="address.city" /><br /> country:<input type="text" name="address.country" /><br /> <input type="submit" value="添加" /> </form>
package com.atguigu.bean; public class User { private Integer id; private String username; private String password; private Integer age; private Address address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + ", age=" + age + ", address=" + address + "]"; } }
package com.atguigu.bean; public class Address { private String province; private String city; private String country; @Override public String toString() { return "Address [province=" + province + ", city=" + city + ", country=" + country + "]"; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
6、 使用Servlet原生API作为参数
MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数
1) HttpServletRequest
2) HttpServletResponse
3) HttpSession
4) java.security.Principal
5) Locale
6) InputStream
7) OutputStream
8) Reader
9) Writer
/** * 可以通过设置形参的方式,获取servletAPI */ @RequestMapping(value="/param", method=RequestMethod.POST) public String param(HttpServletRequest request, HttpServletResponse response) { String username = request.getParameter("username"); System.out.println(username); return "success"; }