1.请求参数绑定入门
作为web层框架,客户端发请求过来,一定会携带请求参数,把数据传给我,拿到数据的过程称之为参数的绑定。
表单提交数据,都是一组键值对,比如username=hehe&password=123.这是一组键值对。
传过来MVC框架,
username=hehe&password=123
sayHello(String username,String password)
如果参数名都是一样的,MVC框架就自动的把传的值赋值到这个方法的参数上。底层通过反射的方式,拿到这个方法的属性,然后把表单这个名字传给属性参数的值。所以请求中的参数名要和方法中参数名保持一致
支持的数据类型
1.基本数据类型
2.实体类型(JavaBean)
3.集合数据类型(List,Map集合)
编写controller类
/*请求参数绑定*/
@Controller
@RequestMapping("/param")
public class ParamController {
/*请求参数绑定入门*/
@RequestMapping("/testParam")
public String testParam(String username,String password){
System.out.println("执行了....");
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
return "success";
}
}
编写index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--请求参数绑定-->
<a href="param/testParam?username=hehe&password=123">请求参数绑定</a>
</body>
</html>
执行结果
2.请求参数绑定实体类型
先建立一个Javabean对象User类
public class Account implements Serializable {
private String username;
private String password;
private Double money;
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 Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
'}';
}
}
下面我们将数据封装到Javabean的一个对象
index.jsp
<!--请求参数绑定-->
<!--<a href="param/testParam?username=hehe&password=123">请求参数绑定</a>-->
<!--现在往一个类里面封装,要求name与Javabean的属性相同,它会通过你写的名字找set方法-->
<form action="param/saveAccount" method="post">
姓名:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
金额:<input type="text" name="money"/><br/>
<input type="submit" value="提交"/>
</form>
controller类
/*请求参数绑定,把数据封装到JavaBean的类中*/
@RequestMapping("/saveAccount")
//提交表单数据,默认全部封装到account中
public String saveAccount(Account account){
System.out.println(account);
return "success";
}
我们再添加一个类User,有属性
private String uname;
private Integer age;
当account中有引用类型,我们怎么给引用类型赋值?能不能往user属性中封装。
private String username;
private String password;
private Double money;
private User user;
再account类中添加user的get和set方法,以及修改tostring
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", user=" + user +
'}';
}
<form action="param/saveAccount" method="get">
姓名:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
金额:<input type="text" name="money"/><br/>
<!--user与account类中user的属性-->
用户姓名:<input type="text" name="user.uname"/><br/>
用户年龄:<input type="text" name="user.age"/><br/>
<input type="submit" value="提交"/>
</form>
controller不变
最后输出结果
3.配置解决中文乱码的问题
如果是post方式提交的时候,此时会中文乱码
如何解决Post的中文乱码。
SpringMVC给我们提供了一个过滤器的机制,我们发任何请求,过滤器都可以进行拦截。如果过滤器拦到,就可以帮我们解决中文乱码。
在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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
提交方式要求是post
4.请求参数绑定集合类型
public class Account implements Serializable {
private String username;
private String password;
private Double money;
private List<User> lists;
private Map<String,User> map;
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 Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public List<User> getLists() {
return lists;
}
public void setLists(List<User> lists) {
this.lists = lists;
}
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", lists=" + lists +
", map=" + map +
'}';
}
}
<form action="param/saveAccount" method="post">
姓名:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
金额:<input type="text" name="money"/><br/>
<!--把这一组数据封装到user对象,再把这user对象存入到list集合中去,-->
用户姓名:<input type="text" name="lists[0].uname"/><br/>
用户年龄:<input type="text" name="lists[0].age"/><br/>
<!--把这一组数据封装到user对象,然后把这个对象存入到map集合中去-->
用户姓名:<input type="text" name="map['one'].uname"/><br/>
用户年龄:<input type="text" name="map['one'].age"/><br/>
<input type="submit" value="提交"/>
</form>