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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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>