第三章 springMVC获取请求参数(servletAPI,控制器方法的形参,@RequestParam,POJO获取请求参数),CharacterEncodingFilter
1.springMVC获取请求参数:
(1)通过servletAPI获取:将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。
@Controller
public class ParamController {
@RequestMapping("/testServletAPI")
//形参位置的request表示当前请求
public String testServletAPI(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:"+username+",password:"+password);
return "success";
}
}
<a th:href="@{testServletAPI(username='admin',password=123456)}">测试使用servletAPI获取请求参数</a><br/>
(2)通过控制器方法的形参获取请求参数:
//在请求参数中出现多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型的形参或者字符串数组接收此请求参数
//若使用字符串类型的形参,最终结果为请求参数的每一个值之间使用逗号进行拼接
@RequestMapping("/testParam")
public String testParam(String username,String password){
System.out.println("username:"+username+"---->password:"+password);
return "success";
}
<a th:href="@{testParam(username='admin',password=123456)}">测试使用控制器方法的形参来获取请求参数</a><br/>
(3)@RequestParam注解处理请求参数和控制器方法:
@RequestMapping("/testParam")
public String testParam(
@RequestParam(value = "user_name",required = false,defaultValue = "haha") String username,
String password,
String[] hobby){
System.out.println("username:"+username+"---->password:"+password+"---->hobby:"+ Arrays.toString(hobby));
return "success";
}
<form th:action="@{testParam}" method="get">
用户名:<input type="text" name="user_name"><br/>
密码:<input type="password" name="password"><br/>
爱好:<input type="checkbox" name="hobby" value="a">
<input type="checkbox" name="hobby" value="b">
<input type="checkbox" name="hobby" value="c"><br/>
<input type="submit" value="测试使用控制器的形参获取请求参数">
</form>
①value:指定为形参赋值的请求参数的参数名;
②required:设置是否必须传输此请求参数,默认值为true;
③defaultValue:不管required请求值为true或false,当value所指定的请求参数没有传输或者传输值为""时,则使用默认值为形参赋值。
(4)@RequestHeader:将请求头信息和控制器方法的形参创建映射关系,用法同@RequestParam;
(5)@CookieValue:将cookie数据和控制器方法的形参创建映射关系,用法同@RequestParam。
@RequestMapping("/testParam")
public String testParam(
@RequestParam(value = "user_name",required = false,defaultValue = "haha") String username,
String password,
String[] hobby,
@RequestHeader(value = "Host",required = true,defaultValue = "hello") String host,
@CookieValue(value = "JSESSIONID",required = true,defaultValue = "session")String JSESSIONID){
System.out.println("username:"+username+"---->password:"+password+"---->hobby:"+ Arrays.toString(hobby));
System.out.println("host:"+host);
System.out.println("JSESSIONID:"+JSESSIONID);
return "success";
}
(6)通过POJO获取请求参数:
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
public User() { }
public User(Integer id, String username, String password, Integer age, String sex, String email) {
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.sex = sex;
this.email = email; }
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 String getSex() { return sex; }
public void setSex(String sex) { this.sex = sex; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", email='" + email + '\'' +
'}'; }
}
//
@RequestMapping("/testBean")
public String testBean(User user){
System.out.println(user);
return "success";
}
<form th:action="@{/testBean}" method="get">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br>
年龄:<input type="text" name="age"><br>
邮箱:<input type="text" name="email"><br>
<input type="submit" value="使用pojo获取请求参数">
</form>
(7)通过CharacterEncodingFilter处理获取请求参数乱码:
//web.xml
<!--过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>