大家都知道怎麼用Servlet來接受處理前臺表單數據,即通過request來獲取數據,我們也應該清楚在SpringMVC是取代了Web層的,也就是取代了Servlet的那麼在SpringMVC如何接受處理呢?
1.Result風格傳值:
我們熟悉的鏈接傳參應該是這個樣子:
<a href="SpringMVCHandler/welcome2?name=zs">參數傳遞</a>
但在jsp中,我們有這樣一個超鏈接:
<a href="SpringMVCHandler/welcome2/zs">參數傳遞</a>
下面我們來看後臺怎麼處理的:
@RequestMapping(value="welcome2/{name}")
public String welcome3(@PathVariable("name") String name) {
System.out.println(name);
return "success" ;
}
沒錯就是通過兩個註解完成了Servlet中的 String name = request.getAttribute("name") 工作。這就是一種方式
2. 我也不知道叫什麼名字2333.....:
在前臺中我們有一個表單:
<form action="SpringMVCHandler/welcome3" method="post">
姓名:<input type="text" name="name" >
<input type="submit" value="test">
</form>
後臺處理:
@RequestMapping(value="welcome3")//映射
public String welcome2(@RequestParam("name") String name,@RequestParam(value="uage",required=false,defaultValue="18") Integer age) {
/*@RequestParam(value="uage",required=false,defaultValue="18") Integer age
required=false 代表此參數非必須 就是說前段傳不傳都行 如果不穿
就按設置的默認值defaultValue="18"來設置*/
System.out.println(name);
System.out.println(age);
return "success" ;
}
沒錯也是通過註解來完成String name = request.getAttribute("name")的工作
到這裏你可能還是感覺不到SpringMVC註解的強大,因爲代碼也沒有省太多嗎,那麼看下面這個:
我們創建了兩個實體類Student Address,其中address是student的一個屬性:
package cn.skh.entity;
public class Student {
private int id;
private String name;
private Address add;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAdd() {
return add;
}
public void setAdd(Address add) {
this.add = add;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", add=" + add + "]";
}
}
package cn.skh.entity;
public class Address {
private String hadd;
private String sadd;
public String getHadd() {
return hadd;
}
public void setHadd(String hadd) {
this.hadd = hadd;
}
public String getSadd() {
return sadd;
}
public void setSadd(String sadd) {
this.sadd = sadd;
}
@Override
public String toString() {
return "Address [hadd=" + hadd + ", sadd=" + sadd + "]";
}
}
我們前臺有一個表單:
<form action="SpringMVCHandler/testObject">
id<input type="text" name="id"><br>
name<input type="text" name="name"><br>
hadd<input type="text" name="add.hadd"><br>
sadd<input type="text" name="add.sadd"><br>
<input type="submit" value="提交">
</form>
如果通過servlet來封裝這些表單數據到對應的對象裏面,那工作量可就大了,先通過request獲得值,然後創建一個新的實例再通過屬性的set方法或構造方法賦值,那可就太麻煩了。
我們先來看Servlet需要怎麼處理:
String name = request.getParameter("name");
int age= Integer.parseInt(request.getParameter("age")s) ;
String haddrss = request.getParameter("homeaddress");
String saddress = request.getParameter("schooladdress");
Address address = new Address();
address.setHomeAddress(haddrss);
address.setSchoolAddress(saddress);
Student student = new Student();
student.setName(name);
student.setAddress(address);
那再讓我們看SpringMVC怎麼處理的:
@RequestMapping(value="testObject")
public String testObject(Student stu) {
System.out.println(stu);
return "success" ;
}
}
我們看打印結果:Student [id=1, name=das, add=Address [hadd=das, sadd=das]]
怎麼樣,是不是體會到了SpringMVC的強大了!