参考视频做法:传送门
实验目标:
(1) 映射URL绑定的占位符到方法入参 使用@pathVarible
(2)绑定请求参数到控制器方法参数 使用@RequestParam
(3)将请求参数绑定到控制器方法的表单对象
(4)将请求参数绑定到控制器方法的Map对象
(1) 映射URL绑定的占位符到方法入参 使用@pathVarible:
用法:
2)绑定请求参数到控制器方法参数 使用@RequestParam
步骤:
在控制器方法入参处使用@RequestParam注解可以将请求参数传递给方法,通过@RequestParam注解的value属性指定参数名,required属性指定参数是否必须,默认为true,表示请求参数中必须包含对应的参数,如果不存在,则抛出异常。
在SpringMVCHandler类中添加方法requestParam,使用@RequestParam注解绑定请求参数到控制器方法参数。如图所示。
在index.jsp页面中添加一个“Request Param”超链接,如下所示:<a href="springmvc/requestParam?userName=my&password=123456">Request Param</a>
浏览页面index.jsp,单击“Request Param”链接,控制台输出“Request Param:my 123456”。
index.jsp:
<a href="springmvc/requestParam?username=my&password=123456">Request Param</a>
SpringMVCHandler.java:
@RequestMapping("/requestParam") public String requestParam(@RequestParam(value="username")String userName,@RequestParam(value="password")String passWord) { System.out.println("request Param:"+userName+" "+passWord); return "success"; }
(3)将请求参数绑定到控制器方法的表单对象
步骤:
Spring MVC会按照参数名和属性名进行自动匹配,自动为该对象填充属性值,并且支持级联。首先在项目的src目录下创建包com.springmvc.entity,在包中创建实体类UserInfo.java和Address.java。
然后在SpringMVCHandler类中添加方法saveUserInfo,将请求参数绑定到控制器方法的表单对象UserInfo中。如图所示。
最后在index.jsp页面中创建一个表单,如图所示。
浏览页面index.jsp,在表单中输入用户名“my”,密码“123456”,省份“JiangSu”和城市“NanJing”,单击“提交”按钮,控制台输出如下:UserInfo [userName=my, password=123456, favorate=null, address=Address [province=JiangSu, city=NanJing]
创建一个新类:
package com.springmvc.entity; public class UserInfo { private String username; private String password; private String favorite; private Address address; 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 String getFavorite() { return favorite; } public void setFavorite(String favorite) { this.favorite = favorite; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public UserInfo(String username, String password, String favorite, Address address) { this.username = username; this.password = password; this.favorite = favorite; this.address = address; } public UserInfo() { super(); } @Override public String toString() { return "UserInfo [username=" + username + ", password=" + password + ", favorite=" + favorite + ", address=" + address + "]"; } }
和address类:
package com.springmvc.entity; public class Address { private String province; private String city; public Address(String province, String city) { this.province = province; this.city = city; } @Override public String toString() { return "Address [province=" + province + ", city=" + city + "]"; } public String getCity() { return city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public void setCity(String city) { this.city = city; } public Address() { super(); } }
index.jsp
<form action="springmvc/saveUserInfo" method="post"><!-- 表单提交 --> username:<input type="text" name="username"><br> password:<input type="text" name="password"><br> province:<input type="text" name="address.province"><br> city:<input type="text" name="address.city"><br> <input type="submit" value="提交"><br> </form>
结果截图:
4)将请求参数绑定到控制器方法的Map对象
步骤:
Spring MVC注解可以将表单数据传递到控制器方法中的Map类型的入参中,在com.springmvc.entity包中创建UserInfoMap类,定义Map<String,UserInfo>类型的属性uiMap,并为该属性提供get和set方法,代码如图所示。
在SpringMVCHandler类中添加方法getUserInfos,实现将请求参数绑定到控制器方法的Map对象,并遍历Map,将Map中的内容输出到控制台。如图所示。
在index.jsp页面中创建一个表单,如图所示。
浏览页面index.jsp,在表单中分别输入两个用户的信息。第一个用户的用户名“my”,密码“123456”,省份“JiangSu”和城市“NanJing”;第一个用户的用户名“sj”,密码“123456”,省份“JiangSu”和城市“YangZhou”。单击“提交”按钮,控制台输出如图所示。
创建Map类,键值是String类型,键值对是userInfo类
package com.springmvc.entity;
import java.util.Map;
public class UserInfoMap {
private Map<String,UserInfo> uiMap;
public Map<String, UserInfo> getUiMap() {
return uiMap;
}
public void setUiMap(Map<String, UserInfo> uiMap) {
this.uiMap = uiMap;
}
}
index.jsp里的写法:
<form action="springmvc/getUserInfo" method="post">
username1:<input type="text" name="uiMap['u1'].username"><br>
password1:<input type="text" name="uiMap['u1'].password"><br>
province1:<input type="text" name="uiMap['u1'].address.province"><br>
city1:<input type="text" name="uiMap['u1'].address.city"><br>
username2:<input type="text" name="uiMap['u2'].username"><br>
password2:<input type="text" name="uiMap['u2'].password"><br>
province2:<input type="text" name="uiMap['u2'].address.province"><br>
city2:<input type="text" name="uiMap['u2'].address.city"><br>
<input type="submit" value="提交"><br>
</form>
实验结果: