请求参数的绑定
1. MVC会自动的绑定请求参数
我们先新建一个控制器
package com.maoyan.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author Maoyan
* @data 2020/4/3 10:46
* @Version 1.0.0
*/
@Controller
@RequestMapping("/param")
public class ParamController {
@RequestMapping("/testParam")
//参数与jsp传的参数相同,MVC会自动的给参数赋值
public String testParam(String user){
System.out.println("testParam执行了,参数为:"+user);
return "success";
}
}
在testParam方法中有一个参数user
再来看看jsp中的
<%--请求参数的绑定--%>
<a href="/param/testParam?user=maoyan" >请求参数的绑定</a>
添加了一个参数,键为user
- 这时,MVC会自动把user的值赋值给控制器中的user
- 效果图
2. 将其封装为JavaBean
先新写一个Uesr实体类
package com.maoyan.pojo;
import java.io.Serializable;
/**
* @author Maoyan
* @data 2020/4/3 10:55
* @Version 1.0.0
*/
public class User implements Serializable {
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;
}
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
实现其get,set和toString方法
jsp中写一个表单,用来提交数据,方法为post
<form action="/param/saveUser" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
在控制器中写saveUser方法
@RequestMapping(path = "/saveUser",method = RequestMethod.POST)
public String saveUser(User user){
//会自动的封装到Uesr中
System.out.println("用户名:"+user.getUsername());
System.out.println("密码:"+user.getPassword());
return "success";
}
- 在这里,参数并不是String的username和password,而是一个User对象
- MVC会自动的把参数封装到对象中
- 通过调用get方法,可以看出自动封装成功。
3. 封装的类中还有一个类
如果在User中还有一个GirlFrined类
User.java
private String username;
private String password;
private GirlFriend girlFriend;
GirlFrined.java
package com.maoyan.pojo;
import java.io.Serializable;
/**
* @author Maoyan
* @data 2020/4/3 11:15
* @Version 1.0.0
*/
public class GirlFriend implements Serializable {
private String name;
private Integer age;
@Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
然而不必惊慌,MVC依旧会自动封装
只要我们这样写
<form action="/param/saveUser" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="text" name="password"/><br/>
<%-- girlfriend的信息--%>
女朋友名字:<input type="text" name="girlFriend.name"/><br/>
女排年龄:<input type="text" name="girlFriend.age"/><br/>
<input type="submit" value="提交"/>
</form>
name=“girlFriend.name”
name=“girlFriend.age”
这两个是重点
再在控制器的方法中输出一下
@RequestMapping(path = "/saveUser",method = RequestMethod.POST)
public String saveUser(User user){
//会自动的封装到Uesr中
System.out.println("用户名:"+user.getUsername());
System.out.println("密码:"+user.getPassword());
System.out.println("女朋友的名字:"+user.getGirlFriend().getName());
System.out.println("女朋友的年龄"+user.getGirlFriend().getAge());
return "success";
}
效果
回忆一下Servlet中的
String name=req.getParameter("uname");
String pwd=req.getParameter("pwd");
差距就出来了!!哈哈哈哈哈哈哈哈