处理请求数据

请求数据 :  请求参数  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 + "]";
    }
    
}
User
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;
    }
    
}
Address

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";
    }

猜你喜欢

转载自www.cnblogs.com/lemonzhang/p/12929530.html