三、SpringMVC之参数封装
一、基本数据欸型的参数
1.页面传递的参数,都需要配置到方法参数列表上
2.页面传递的参数名称必须要参数列表上的参数名称一致
3对与基本数据类型springMVC框架可以自动转型
4.特殊的类型: 配置类型转化器(将string类型参数转化为date类型)
控制器方法
/**
* 接收基本数据类型的参数
* 1页面传递的参数,都需要配置到方法参数列表上
* 2页面传递的参数名称必须要参数列表上的参数名称一致
*
* 3对与基本数据类型
* springMVC框架可以自动转型
* 4特殊的类型:
* * 配置类型转化器(将string类型参数转化为date类型)
*/
@RequestMapping(value = "/basic")
public String delete (String name,Integer age) {
System.out.println(name +" ====="+age);
return "success";
}
@RequestMapping("/special")
public String update(Date date) {
System.out.println(date);
return "success";
}
设置类型转换器:
1.实现Converter接口
2.将自定义类型转化器注册到spring框架中
3.需要将conversionService配置到annotation-driven中
/**
* 自定义类型转化器
* 1.实现Converter接口
* <S(传递的参数),T(需要转化的对象类型)>
* 2.将自定义类型转化器注册到spring框架中
*
* <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
* <!--将类型转化器注册到转化器服务 -->
* <property name="converters">
* <!--该参数接受的为一个数组-->
* <array>
* <!-- 创建自定义类型转换器对象 -->
* <bean class="cn.itcast.converter.StringToDateConverter"></bean>
* </array>
* </property>
* </bean>
* 3.需要将conversionService配置到annotation-driven中
* <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
*
*/
public class StringToDateConverter implements Converter<String, Date> {
@Override
public Date convert(String args) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(args);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
二、接受引用类型数据(javaBean对象)
SpringMVC可以将页面传递的数据,自动的封装为一个java对象
1. 需要将对象以参数的形式传递到方法中
2.在页面传递参数的时候,参数名称必须和对象中的属性名称一致(和set方法名后半部分内容一致,底层通过反射set方法赋值)
控制器方法:
/**
* 接收对象类型的数据
* 将页面传递的数据,自动的封装为一个java对象
* * 1需要将对象以参数的形式传递到方法中
* * 2在页面传递参数的时候,参数名称必须和对象中的属性名称一致
*/
@RequestMapping("/queryUser")
public String update(User user) {
System.out.println(user);
return "success";
}
请求参数
<h1>表单2</h1>
<form method="post" action="${pageContext.request.contextPath}/queryUser">
姓名:<input name="username" value="zhangsan" />
<br>
密码:<input name="password" value="1234" />
<br>
生日:<input name="birthday" value="1991-11-11" />
<br>
年龄:<input name="age" value="19" />
<input type="submit" value="提交">
</form>
javaBean
public class User {
private String username;
private Integer age;
private Date birthday;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, Integer age, Date birthday, String password) {
super();
this.username = username;
this.age = age;
this.birthday = birthday;
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", age=" + age + ", birthday=" + birthday + ", password=" + password
+ "]";
}
}
三、list集合、map集合
1.集合必须被封装到一个对象中
2.list请求参数格式为:集合名称[索引].属性 例:users[1].username
map请求参数格式为:集合名称[key].属性 例:userMaps[key1].username
集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。
控制器方法
/**
* 封装为list或者map集合类型
* 1.集合必须被封装到一个对象中
* 2.list请求参数格式为:**集合名称[索引].属性** 例:users[1].username
* map请求参数格式为:**集合名称[key].属性** 例:userMaps[key1].username
*集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。**
*/
@RequestMapping("/list")
public String update(QueryVo vo) {
System.out.println(vo);
return "success";
}
@RequestMapping("/map")
public String update(QueryVo vo) {
System.out.println(vo);
return "success";
}
请求表单
</form>
<h1>测试map的表单</h1>
<form method="post" action="${pageContext.request.contextPath}/map">
姓名:<input name="userMaps[key1].username" value="zhangsan" />
<br>
密码:<input name="userMaps[key1].password"value="1234" />
<br>
生日:<input name="userMaps[key1].birthday" value="1991-11-11" />
<br>
年龄:<input name="userMaps[key1].age" value="19" />
姓名:<input name="userMaps[key2].username" value="zhangsan" />
<br>
密码:<input name="userMaps[key2].password" value="1234" />
<br>
生日:<input name="userMaps[key2].birthday" value="1991-11-11" />
<br>
年龄:<input name="userMaps[key2].age" value="19" />
<input type="submit" value="提交">
</form>
<h1>测试list的表单</h1>
<form method="post" action="${pageContext.request.contextPath}/list">
姓名:<input name="users[0].username" value="zhangsan" />
<br>
密码:<input name="users[0].password" value="1234" />
<br>
生日:<input name="users[0].birthday" value="1991-11-11" />
<br>
年龄:<input name="users[0].age" value="19" />
姓名:<input name="users[1].username" value="zhangsan" />
<br>
密码:<input name="users[1].password" value="1234" />
<br>
生日:<input name="users[1].birthday" value="1991-11-11" />
<br>
年龄:<input name="users[1].age" value="19" />
<input type="submit" value="提交">
</form>
<br>
封装集合的javaBean
public class QueryVo {
private List<User> users;
private Map<String, User> userMaps;
public QueryVo() {
super();
// TODO Auto-generated constructor stub
}
public QueryVo(List<User> users, Map<String, User> userMaps) {
super();
this.users = users;
this.userMaps = userMaps;
}
public Map<String, User> getUserMaps() {
return userMaps;
}
public void setUserMaps(Map<String, User> userMaps) {
this.userMaps = userMaps;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "QueryVo [users=" + users + ", userMaps=" + userMaps + "]";
}
}
四、获取servletApi对象
将需要获取的servletApi对象直接放在方法形参上,及可完成获取
如:request,response,session,cookie ,writer等等
/**
* 可以在方法中获取servletApi对象
* request,response,session
* * 只需要将对应的servletApi对象以参数的形式存入方法中就可以
*/
@RequestMapping("/servletAPI")
public String servletAPI(HttpServletRequest request ,HttpServletResponse response,HttpSession session) {
request.setAttribute("rkey", "request");
session.setAttribute("skey", "session");
return "success";
}
@RequestMapping("/servletCookie")
public String servletCookie(Cookie cookie) {
System.out.println(cookie.getValue());
return "success";
}
================
一、基本数据欸型的参数
1.页面传递的参数,都需要配置到方法参数列表上
2.页面传递的参数名称必须要参数列表上的参数名称一致
3对与基本数据类型springMVC框架可以自动转型
4.特殊的类型: 配置类型转化器(将string类型参数转化为date类型)
控制器方法
/**
* 接收基本数据类型的参数
* 1页面传递的参数,都需要配置到方法参数列表上
* 2页面传递的参数名称必须要参数列表上的参数名称一致
*
* 3对与基本数据类型
* springMVC框架可以自动转型
* 4特殊的类型:
* * 配置类型转化器(将string类型参数转化为date类型)
*/
@RequestMapping(value = "/basic")
public String delete (String name,Integer age) {
System.out.println(name +" ====="+age);
return "success";
}
@RequestMapping("/special")
public String update(Date date) {
System.out.println(date);
return "success";
}
设置类型转换器:
1.实现Converter接口
2.将自定义类型转化器注册到spring框架中
3.需要将conversionService配置到annotation-driven中
/**
* 自定义类型转化器
* 1.实现Converter接口
* <S(传递的参数),T(需要转化的对象类型)>
* 2.将自定义类型转化器注册到spring框架中
*
* <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
* <!--将类型转化器注册到转化器服务 -->
* <property name="converters">
* <!--该参数接受的为一个数组-->
* <array>
* <!-- 创建自定义类型转换器对象 -->
* <bean class="cn.itcast.converter.StringToDateConverter"></bean>
* </array>
* </property>
* </bean>
* 3.需要将conversionService配置到annotation-driven中
* <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
*
*/
public class StringToDateConverter implements Converter<String, Date> {
@Override
public Date convert(String args) {
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(args);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
二、接受引用类型数据(javaBean对象)
SpringMVC可以将页面传递的数据,自动的封装为一个java对象
1. 需要将对象以参数的形式传递到方法中
2.在页面传递参数的时候,参数名称必须和对象中的属性名称一致(和set方法名后半部分内容一致,底层通过反射set方法赋值)
控制器方法:
/**
* 接收对象类型的数据
* 将页面传递的数据,自动的封装为一个java对象
* * 1需要将对象以参数的形式传递到方法中
* * 2在页面传递参数的时候,参数名称必须和对象中的属性名称一致
*/
@RequestMapping("/queryUser")
public String update(User user) {
System.out.println(user);
return "success";
}
请求参数
<h1>表单2</h1>
<form method="post" action="${pageContext.request.contextPath}/queryUser">
姓名:<input name="username" value="zhangsan" />
<br>
密码:<input name="password" value="1234" />
<br>
生日:<input name="birthday" value="1991-11-11" />
<br>
年龄:<input name="age" value="19" />
<input type="submit" value="提交">
</form>
javaBean
public class User {
private String username;
private Integer age;
private Date birthday;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String username, Integer age, Date birthday, String password) {
super();
this.username = username;
this.age = age;
this.birthday = birthday;
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", age=" + age + ", birthday=" + birthday + ", password=" + password
+ "]";
}
}
三、list集合、map集合
1.集合必须被封装到一个对象中
2.list请求参数格式为:集合名称[索引].属性 例:users[1].username
map请求参数格式为:集合名称[key].属性 例:userMaps[key1].username
集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。
控制器方法
/**
* 封装为list或者map集合类型
* 1.集合必须被封装到一个对象中
* 2.list请求参数格式为:**集合名称[索引].属性** 例:users[1].username
* map请求参数格式为:**集合名称[key].属性** 例:userMaps[key1].username
*集合名称指的是:集合在封装该集合的javaBean中的属性名对应的set方法后面的名称。**
*/
@RequestMapping("/list")
public String update(QueryVo vo) {
System.out.println(vo);
return "success";
}
@RequestMapping("/map")
public String update(QueryVo vo) {
System.out.println(vo);
return "success";
}
请求表单
</form>
<h1>测试map的表单</h1>
<form method="post" action="${pageContext.request.contextPath}/map">
姓名:<input name="userMaps[key1].username" value="zhangsan" />
<br>
密码:<input name="userMaps[key1].password"value="1234" />
<br>
生日:<input name="userMaps[key1].birthday" value="1991-11-11" />
<br>
年龄:<input name="userMaps[key1].age" value="19" />
姓名:<input name="userMaps[key2].username" value="zhangsan" />
<br>
密码:<input name="userMaps[key2].password" value="1234" />
<br>
生日:<input name="userMaps[key2].birthday" value="1991-11-11" />
<br>
年龄:<input name="userMaps[key2].age" value="19" />
<input type="submit" value="提交">
</form>
<h1>测试list的表单</h1>
<form method="post" action="${pageContext.request.contextPath}/list">
姓名:<input name="users[0].username" value="zhangsan" />
<br>
密码:<input name="users[0].password" value="1234" />
<br>
生日:<input name="users[0].birthday" value="1991-11-11" />
<br>
年龄:<input name="users[0].age" value="19" />
姓名:<input name="users[1].username" value="zhangsan" />
<br>
密码:<input name="users[1].password" value="1234" />
<br>
生日:<input name="users[1].birthday" value="1991-11-11" />
<br>
年龄:<input name="users[1].age" value="19" />
<input type="submit" value="提交">
</form>
<br>
封装集合的javaBean
public class QueryVo {
private List<User> users;
private Map<String, User> userMaps;
public QueryVo() {
super();
// TODO Auto-generated constructor stub
}
public QueryVo(List<User> users, Map<String, User> userMaps) {
super();
this.users = users;
this.userMaps = userMaps;
}
public Map<String, User> getUserMaps() {
return userMaps;
}
public void setUserMaps(Map<String, User> userMaps) {
this.userMaps = userMaps;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "QueryVo [users=" + users + ", userMaps=" + userMaps + "]";
}
}
四、获取servletApi对象
将需要获取的servletApi对象直接放在方法形参上,及可完成获取
如:request,response,session,cookie ,writer等等
/**
* 可以在方法中获取servletApi对象
* request,response,session
* * 只需要将对应的servletApi对象以参数的形式存入方法中就可以
*/
@RequestMapping("/servletAPI")
public String servletAPI(HttpServletRequest request ,HttpServletResponse response,HttpSession session) {
request.setAttribute("rkey", "request");
session.setAttribute("skey", "session");
return "success";
}
@RequestMapping("/servletCookie")
public String servletCookie(Cookie cookie) {
System.out.println(cookie.getValue());
return "success";
}