SpringMVC学习3

数据绑定
获取用户提交的参数,绑定到入参的参数中,就叫做数据绑定。
在Controller中获取Servlet的内置对象(Request、Response、Session)是非常简单的,如下:






@RequestParam
作用:获取请求中的参数,问号后面的请求参数。如果是POST请求,则为请求体中的kv数据。

有三个参数:
1、value:参数名
2、required:是否必须,默认为true,表示请求参数中必须包含该参数,如果不包含则抛出异常。
3、defaultValue:默认参数值,如果设置了该值,则自动将required的值设置为false,如果参数中没有包含该参数,则使用默认值。

例:@RquestParam(value="userId",required=false,defaultValue="1001")





@CookieValue:获取请求参数中的Cookie值






@CookieValue:获取请求参数中的Cookie值
POJO对象绑定参数
SpringMVC会将请求过来的参数名和POJO实体中的属性名进行匹配,如果名称一致,将把值填充到对象中。
package com.its.springmvc.pojo;

public class User {
    private Long userId;
    private String username;
    private String password;
    private String realName;
    private int sex;
    private int age;
    private String birthday;
    private String phone;

    // setter、getter方法略...

    @Override
    public String toString() {
        return "User [userId=" + userId + ", username=" + username + ", password=" + password + ", realName=" + realName
                + ", sex=" + sex + ", age=" + age + ", birthday=" + birthday + ", phone=" + phone + "]";
    }
}







使用工具构建POST请求:Advanced Rest Client



响应结果:





Java的基本数据类型绑定:
        Spring对Java的基本数据类型的转换支持的非常多,基本能满足日常开发需要,默认支持的数据类型在 org.springframework.beans.PropertyEditorRegistrySupport 中定义。


示例:
register.jsp
<div>
	<form action="/its/test12.action" method="post">
		用户名:<input type="text" name="username" id="username" /><br/>
		密码:<input type="password" name="password" id="password" /><br/>
		性别:<input type="radio" name="sex" value="1" />男
			<input type="radio" name="sex" value="0" />女<br/>
		年龄:<input type="text" name="age" id="age" /><br/>
		收入:<input type="text" name="income" id="income" /><br/>
		是否结婚:<input type="radio" name="isMarried" value="1" />是
			<input type="radio" name="isMarried" value="0" />否<br/>
		兴趣爱好:<input type="checkbox" name="hobby" value="swimming" />游泳
			<input type="checkbox" name="hobby" value="reading" />阅读
			<input type="checkbox" name="hobby" value="singing" />唱歌<br/>
		<input type="submit" value="立即注册" />
		<input type="reset" value="重置" />
	</form>
</div>


Controller
@RequestMapping(value = "test12")
// 无需跳转页面,直接返回状态码200
@ResponseStatus(value = HttpStatus.OK)
public void test12(@RequestParam("username") String username, @RequestParam("password") String password,
		@RequestParam("age") Integer age, @RequestParam("sex") Integer sex, @RequestParam("income") Double income,
		@RequestParam("isMarried") Boolean isMarried, @RequestParam("hobby") String[] hobby) {
	System.out.println("=====基本数据类型======");
	System.out.println("用户名:" + username);
	System.out.println("密码:" + password);
	System.out.println("年龄:" + age);
	System.out.println("性别:" + sex);
	System.out.println("收入:" + income);
	System.out.println("是否结婚:" + isMarried);
	for (String h : hobby) {
		System.out.println(h);
	}
	System.out.println("====================");
}

测试结果:





绑定List集合
注意:List的绑定需要先将List对象包装到一个类中的才能绑定。

示例:
users.jsp

<div>
	<form action="/its/test13.action" method="post">
		<div>用户1:</div>
		<div><input type="text" name="users[0].username" value="zhangsan" /></div>
		<div>用户2:</div>
		<div><input type="text" name="users[1].username" value="lisi" /></div>
		<div>用户3:</div>
		<div><input type="text" name="users[2].username" value="wangwu" /></div>
		<div><input type="submit" value="提交表单" /></div>
	</form>
</div>

UserForm.java
package com.its.springmvc.pojo;

import java.util.ArrayList;
import java.util.List;

public class UserForm {
    private List<User> users = new ArrayList<User>();  // 需要将List集合包装成对象

    public List<User> getUsers() {
        return users;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }

    @Override
    public String toString() {
        return "UserForm [users=" + users + "]";
    }
}

Controller



测试:控制台打印结果
UserForm [users=[User [userId=null, username=zhangsan, password=null, realName=null, sex=0, age=0, birthday=null, phone=null], User [userId=null, username=lisi, password=null, realName=null, sex=0, age=0, birthday=null, phone=null], User [userId=null, username=wangwu, password=null, realName=null, sex=0, age=0, birthday=null, phone=null]]]



SpringMVC和Struts2的区别:
1、入口不同。SpringMVC的入口是一个Servlet,Struts2的入口是一个过滤器Filter,两者的实现机制不同。
2、设计方式不同。SpringMVC基于方法设计,传递的参数是通过方法形参,其实现是单例模式(也可以改为单例,推荐使用单例),Struts2基于类设计,传递参数是通过类的属性,只能是多实例,性能上SpringMVC更高一些。
3、参数传递方面。Struts2是用类的属性接收的,也就是在多个方法间共享,而SpringMVC是基于方法的,多个方法之间不能共享。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值