SpringMVC第四阶段:Controller中如何接收请求参数

Controller中如何接收请求参数

1、原生API参数类型

1.1、HttpServletRequest类

只需要在Controller的目标方法中, 直接写上HttpServletRequest对象即可获取 原生API的 request对象实例。

@RequestMapping(value = "/p1")
public String param1(HttpServletRequest request){
    System.out.println(" httpServletRequest对象 : " + request);
    System.out.println("获取请求的参数: " + request.getParameter("username"));
    System.out.println("获取工程路径: " + request.getContextPath());
    System.out.println("获取请求资源路径:  " + request.getRequestURI());
    return "ok";
}

1.2、HttpSession类 和HttpServletResponse类

@RequestMapping(value = "/p2")
public String param2(HttpSession session , HttpServletResponse response){
    System.out.println(" 会话id: " + session.getId());
    System.out.println(" 是否是新创建的: " + session.isNew() );
    System.out.println( "response对象" + response );

    return "ok";
}

以上这几个原生API 只需要在Controller 控制器的方法上直接写参数就可以获取,使用跟原来一样.

2、普通类型入参

/**
 * 在SpringMVC框架中,如果要获取请求的参数,只需要把参数直接写在Controller的方法上即可.
* 注意点:
* 1 参数的类型要一致
* 2 参数名要一致!
*/
@RequestMapping(value = "/p3") public String param3(String username,Integer age,String password){ System.out.println("请求参数 username 的值是: " + username); System.out.println("年龄 : " + age); System.out.println("密码 : " + password); return "ok"; }

3、普通类型数组的参数

/**
 * 如果要使用SpringMVC获取多个参数值的时候,只需要直接写成数组即可!!! 
* 注意点:
* 1 参数的类型要一致
* 2 参数名要一致!
*/
@RequestMapping(value = "/p4") public String param4(String[] hobby){ System.out.println("兴趣爱好: " + Arrays.asList(hobby)); System.out.println("爱好1 : " + hobby[0]); System.out.println("爱好2 : " + hobby[1]); return "ok"; }

4、普通类型使用@RequestParam入参

示例代码:

/**
 * 客户端的参数名是username, 服务器参数名是user. 是否可以取值.
* @RequestParam(name = "username") String user
* 表示把请求参数 username 的值,赋给方法参数 user
* * 如果没有传递就会报错.
* required = false 表示客户端不传递不报错.值为null
* defaultValue 表示默认值
* @param user * @return */
@RequestMapping(value = "/p5") public String param5(@RequestParam(name = "username",required = false,defaultValue = "哟!!") String user){ System.out.println("user的值是: " + user); return "ok"; }

如果指定的参数客户端 不传递 , 就会报以下错误。

SpringMVC第四阶段:Controller中如何接收请求参数_第1张图片

5、@RequestHeader获取请求头入参

@RequestParam注解是获取指定请求参数的值注入到Controller方法参数中
@ReqeustHeader 注解是将指定请求头的值注入到Controller方法参数中

@RequestParam和@ReqeustHeader 注解的使用规则一样

@RequestMapping(value = "/p6")
public  String param6(@RequestHeader(name="User-Agent")  String userAgent
        ,@RequestHeader(name="Connection")String connection ){
    System.out.println("请求头 userAgent 的值是: " + userAgent);
    System.out.println("请求头 connection 的值是: " + connection);
    return "ok";
}

6、@CookieValue获取Cookie值入参

@CookieValue注解和@RequestParam注解和@ReqeustHeader 注解使用规则完全一样.
把请求的Cookie的值注入到Controller方法参数中

@RequestMapping(value = "/p7")
public  String param7(@CookieValue(name = "JSESSIONID") String jSessionId){
    System.out.println("Cookie jSessionId 的值是: " + jSessionId);
    return "ok";
}

@CookieValue注解:获取Cookie值注入方法参数
@RequestParam注解:获取客户端参数值注入方法参数
@ReqeustHeader 注解 :获取请求头注入方法参数

7、Pojo对象类型的参数

只需要注意请求的参数名要和JavaBean的属性名一致即可

表单:

<%--
  斜杠表示绝对路径.

  如果是浏览器解析 , 得到的路径是: http://ip:port/ <br/>

  如果是服务器解析 , 得到的路径是: http://ip:port/工程路径/
--%>
<form action="${pageContext.request.contextPath}/addperson" method="get">
  编号: <input id="id" name="id" /> <br>
  名称: <input id="name" name="name" /> <br>
  年龄: <input id="age" name="age" /> <br>
  电话: <input id="phone" name="phone" /> <br>
  <input type="submit" value="提交" />
</form>

JavaBean对象:

public class Person {
    private Integer id;
    private String name;
    private Integer age;
    private String phone;

}

Controller中的代码:

/**
 *  请求的参数名要和javaBean的属性名一致!!!
 */
@RequestMapping(value = "/addperson")
public String person(Person person){
    System.out.println("用户信息保存 ==>>> " + person);
    return "ok";
}

8、对象中套对象(级联属性)

表单:

<%--
  斜杠表示绝对路径.

  如果是浏览器解析 , 得到的路径是: http://ip:port/ <br/>

  如果是服务器解析 , 得到的路径是: http://ip:port/工程路径/
--%>
<form action="${pageContext.request.contextPath}/addperson" method="get">
  编号: <input id="id" name="id" /> <br>
  名称: <input id="name" name="name" /> <br>
  年龄: <input id="age" name="age" /> <br>
  电话: <input id="phone" name="phone" /> <br>
  <%--
    使用级联属性赋值
  --%>
  车名: <input id="car.name" name="car.name" /> <br>
  车牌: <input id="car.carNo" name="car.carNo" /> <br>
  <input type="submit" value="提交" />
</form>

JavaBean代码 :

public class Car {
    private String name;
    private String carNo;
}
public class Person {
    private Integer id;
    private String name;
    private Integer age;
    private String phone;
    private Car car;
}

你可能感兴趣的:(Java,servlet,java,开发语言)