SpringMVC 获取请求参数
有两种方法:
一、通过 HttpServletRequest 对象获取请求数据
二、通过参数注入获取请求参数
在Servlet中我们通过request.getParameter(name)方法获取请求参数。该方法存在两个问题:
- 请求参数多时会出现代码杂乱的现象
- 与容器紧耦合
解决方案:
案例如下:
1、通过 HttpServletRequest 对象获取请求数据
//通过HttpServletRequest对象获取请求参数
@RequestMapping("/getData")
public ModelAndView getRequestParameter(HttpServletRequest request){
String username = request.getParameter("name");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("username",username);
return modelAndView;
}
2、通过参数注入获取请求参数
2.1、注入多参数
//通过SpringMVC参数注入方式获取请求参数-注入多参数
@RequestMapping("/addUsers")
public ModelAndView addUsers(String username,int userage){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("name",username);
modelAndView.addObject("age",userage);
return modelAndView;
}
2.2、@RequestParam 注解
//通过SpringMVC参数注入方式获取请求参数-注入多参数
//@RequestParam注解的使用
@RequestMapping("/addUsers2")
public ModelAndView addUsers2(@RequestParam(value = "name",required = true,defaultValue = "张三") String username, int userage){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("name",username);
modelAndView.addObject("age",userage);
return modelAndView;
}
2.3、注入集合参数
创建页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="suibian/addUsers3">
用户姓名:<input type="text" name="username"/><br/>
爱好:<br/>
体育<input type="checkbox" value="Sport" name="userlike"/>
音乐<input type="checkbox" value="Music" name="userlike"/>
艺术<input type="checkbox" value="Art" name="userlike"/><br/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
修改控制器
//通过SpringMVC参数注入方式获取请求参数-注入多参数
//注入集合参数
@RequestMapping("/addUsers3")
public ModelAndView addUsers3(String username,String[] userlike){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("name",username);
String temp = " ";
for (String string : userlike){
temp += string + " ";
}
modelAndView.addObject("userlike",temp);
return modelAndView;
}
}
2.4、注入对象参数
1、注入单个对象
创建POJO
public class Users {
private String username;
private List<String> userlike;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getUserlike() {
return userlike;
}
public void setUserlike(List<String> userlike) {
this.userlike = userlike;
}
}
修改配置器
@RequestMapping("/addUsers4")
public ModelAndView addUsers4(Users users){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("name",users.getUsername());
String temp = " ";
for (String string : users.getUserlike()){
temp += string + " ";
}
modelAndView.addObject("userlike",temp);
return modelAndView;
}
2、注入关联对象
SpringMVC可以根据对象的关联关系实现请求参数的注入。
创建POJO
public class Users {
private String username;
private List<String> userlike;
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getUserlike() {
return userlike;
}
public void setUserlike(List<String> userlike) {
this.userlike = userlike;
}
@Override
public String toString() {
return "Users{" +
"username='" + username + '\'' +
", userlike=" + userlike +
'}';
}
}
public class Address {
private String phonenumber;
private String postcode;
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getPostcode() {
return postcode;
}
public void setPostcode(String postcode) {
this.postcode = postcode;
}
@Override
public String toString() {
return "Address{" +
"phonenumber='" + phonenumber + '\'' +
", postcode='" + postcode + '\'' +
'}';
}
}
创建页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="suibian/addUsers5">
用户姓名:<input type="text" name="username"/><br/>
爱好:<br/>
体育<input type="checkbox" value="Sport" name="userlike"/>
音乐<input type="checkbox" value="Music" name="userlike"/>
艺术<input type="checkbox" value="Art" name="userlike"/><br/>
地址:<br/>
电话号码:<input type="text" name="address.phonenumber"/>
邮编:<input type="text" name="address.postcode"/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
修改控制器
@RequestMapping("/addUsers5")
public ModelAndView addUsers5(Users users){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("user",users.toString());
modelAndView.addObject("address",users.getAddress().toString());
return modelAndView;
}
3、向集合中注入对象
在SpringMVC中可以向一个集合属性中注入对象
1、List 集合
修改Users
public class Users {
private String username;
private List<String> userlike;
private Address address;
private List<Address> addressList;
public List<Address> getAddressList() {
return addressList;
}
public void setAddressList(List<Address> addressList) {
this.addressList = addressList;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getUserlike() {
return userlike;
}
public void setUserlike(List<String> userlike) {
this.userlike = userlike;
}
@Override
public String toString() {
return "Users{" +
"username='" + username + '\'' +
", userlike=" + userlike +
'}';
}
}
创建页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="suibian/addUsers6">
用户姓名:<input type="text" name="username"/><br/>
爱好:<br/>
体育<input type="checkbox" value="Sport" name="userlike"/>
音乐<input type="checkbox" value="Music" name="userlike"/>
艺术<input type="checkbox" value="Art" name="userlike"/><br/>
地址1:<br/>
电话号码:<input type="text" name="addressList[0].phonenumber"/>
邮编:<input type="text" name="addressList[0].postcode"/><br/>
地址2:<br/>
电话号码:<input type="text" name="addressList[1].phonenumber"/>
邮编:<input type="text" name="addressList[1].postcode"/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
修改控制器
@RequestMapping("/addUsers6")
public ModelAndView addUsers6(Users users){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("user",users.toString());
modelAndView.addObject("address",users.getAddressList());
return modelAndView;
}
2、Map集合
修改Users
public class Users {
private String username;
private List<String> userlike;
private Address address;
private List<Address> addressList;
private Map<String,Address> addressMap;
public Map<String, Address> getAddressMap() {
return addressMap;
}
public void setAddressMap(Map<String, Address> addressMap) {
this.addressMap = addressMap;
}
public List<Address> getAddressList() {
return addressList;
}
public void setAddressList(List<Address> addressList) {
this.addressList = addressList;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getUserlike() {
return userlike;
}
public void setUserlike(List<String> userlike) {
this.userlike = userlike;
}
@Override
public String toString() {
return "Users{" +
"username='" + username + '\'' +
", userlike=" + userlike +
'}';
}
}
创建页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="suibian/addUsers7">
用户姓名:<input type="text" name="username"/><br/>
爱好:<br/>
体育<input type="checkbox" value="Sport" name="userlike"/>
音乐<input type="checkbox" value="Music" name="userlike"/>
艺术<input type="checkbox" value="Art" name="userlike"/><br/>
地址1:<br/>
电话号码:<input type="text" name="addressMap['one'].phonenumber"/>
邮编:<input type="text" name="addressMap['one'].postcode"/><br/>
地址2:<br/>
电话号码:<input type="text" name="addressMap['two'].phonenumber"/>
邮编:<input type="text" name="addressMap['two'].postcode"/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
修改控制器
@RequestMapping("/addUsers7")
public ModelAndView addUsers7(Users users){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("user",users.toString());
Set<Map.Entry<String, Address>> set = users.getAddressMap().entrySet();
modelAndView.addObject("address",set);
return modelAndView;
}