文章目錄
- SpringMVC的引數系結
- 1 傳統方式進行引數傳遞
- 2 通過SpringMVC的引數系結實作【***用這個就行】
- 2.1 SpringMVC的基本資料型別的引數系結
- 2.1.1 方法形式引數名和頁面傳入引數名一致
- 2.1.2 方法形式引數名和頁面傳入引數名不一致
- 2.1.3 總結
- 2.2 SpringMVC的物件資料型別`pojo`引數系結
- 案例
- 2.3 SpringMVC的嵌套javabean引數系結
SpringMVC的引數系結
??用戶請求服務器的時候會向后臺傳遞引數(Controller), 如何來快速的接收到用戶傳遞的引數,可以通過引數系結來實作,
1 傳統方式進行引數傳遞
??在Controller中的方法的形式引數上直接宣告HttpServletRequest, HttpServletResponse , HttpSession(就是以前的JAVAEE獲取方法)
//注解,通過這個地址login1.action執行當前方法
@RequestMapping("test01.action")
public ModelAndView test01(HttpServletRequest req){
//springmvc會將請求物件 賦值給req
String username= req.getParameter("username");
String password= req.getParameter("password");
System.out.println(username);
System.out.println(password);
ModelAndView mv= new ModelAndView();
mv.setViewName("main");//通過配置視圖決議器前后綴,找到指定界面
return mv;
}
2 通過SpringMVC的引數系結實作【***用這個就行】
?? 對于普通的資料型別(8大基本資料型別、String資料型別)會直接自動進行引數系結【springmvc的內部有默認的型別轉換器,比如Spring -> int】;但是如果是自定義資料型別或其他資料型別,需要創建一個bean物件類,進行封裝呼叫,
2.1 SpringMVC的基本資料型別的引數系結
2.1.1 方法形式引數名和頁面傳入引數名一致
只需要保證請求作用域request(也就是從瀏覽器傳過來的值)的name和方法上的形式引數名稱一致,就可以自動賦值,
@RequestMapping("test02.action")
public ModelAndView test02(String username1,String password){
//springmvc會將請求物件,賦值給request
//引數系結就是自動從requeest,將引數值取出來賦值給形式引數username password
System.out.println(username1);
System.out.println(password);
ModelAndView mv= new ModelAndView();
mv.setViewName("main");通過配置視圖決議器前后綴,找到指定界面
return mv;
}
2.1.2 方法形式引數名和頁面傳入引數名不一致
如果你的形參的名字和頁面傳入的引數名字不一致,可以使用@RequestParam注解,將引數名不同的設定@RequestParam(value="頁面的引數名")
@RequestParam的三個值
- value:請求引數的引數名, 注解中value值要和頁面傳入的引數名稱一致,
- required:該引數是否必須,默認為true,如果沒有給這個值,則出現400錯誤頁面,
- defaultValue:請求引數的默認值,比如defaultValue = “default”,如果給了引數,就獲取,如果沒有給引數,則默認為default的值,
比如從頁面傳入的引數名是username和password,接收引數是name和password,需要對name增加注解,應該寫成下面這種情況
public ModelAndView test03(@RequestParam(value="username") String name, String password){
//需要將形式引數name標明只的是頁面引數username
System.out.println(name);
System.out.println(password);
ModelAndView mv= new ModelAndView();
mv.setViewName("main");
return mv;
}
2.1.3 總結
- 基本資料型別和String的引數自動系結
- springmvc會自動將請求物件,賦值給request,引數自動系結就是自動的從request中獎資料賦值給引數串列
- 前提條件(引數串列和請求request域中的名稱相同,不同就不賦值)
- 自動的從request中獲取值賦值給引數串列(名稱要相同,而且只能處理簡單的引數(8中基本資料型別 + String))
- 如果從頁面傳入的引數名和方法形式引數不一樣,就需要通過
@RequestParam注解來設定(可以設定多個,順序和形式引數要一致)- 如果引數名稱不同可以通過注解
@RequestParam補救,如果沒有注解存在,就按引數串列來獲取值,如果有注解存在,先按注解賦值(有注解優先看注解)
2.2 SpringMVC的物件資料型別pojo引數系結
pojo概念:
??POJO(Plain Ordinary Java Object)就是簡單的Java物件,實際就是普通JavaBeans,(需要創建對應的javabean類)
??其中只有一些屬性及其getter setter方法的類,沒有別的什么業務邏輯方法,
使用場景
??當頁面需要傳遞多個引數時(一個表單等情況),我們可以將多個引數封裝到一個JavaBean類,(使用POJO類進行資料封裝,就是創建不同javabean物件封裝),
??將這個JavaBean作為方法形參,SpringMVC可以直接將頁面的資料賦值給JavaBean物件(引數串列引數自動賦值),
?? 【前提條件】JavaBean類中成員變數的名字和必須和表單中name屬性的值一樣(因為取值賦值通過get/set方法),
案例
前臺頁面jsp
<input type="text" name="username" placeholder="請輸入用戶名"/>
<input type="password" name="password" placeholder="請輸入密碼"/>
我們就可以將其封裝成一個User的pojp物件
public class User{
private String username;
private String password;
//省略get/set方法(一定得有)
}
引數系結:
@RequestMapping("test04.action")
//從頁面獲取引數然后賦值給javabean物件的同名屬性(通過set方法)
public ModelAndView test04(User user){
//springMVC可以將表單的資料賦值給一個javaBean物件
//通過get方法獲取已經被自動賦值的javabean物件屬性
System.out.println(user.getUsername());
System.out.println(user.getPassword());
ModelAndView mv= new ModelAndView();
mv.setViewName("main");
return mv;
}
2.3 SpringMVC的嵌套javabean引數系結
概念
?封裝多個不同型別的javabean物件做成員變數(就是一個javabean又封裝了多個javabean物件作為屬性),
?當前的javaBean類的成員變數有復雜型別(其他javabean)如:Person類中有birthday等變數
??通過當前成員屬性名(javabean物件作為成員屬性名)加.點來獲取它的屬性
javabean
public class Person {
private int id;
private String username;
private String password;
private Birthday birthday;
//省略get/set方法
}
public class Birthday {
private int year;
private int month;
private int day;
//省略get/set方法
}
后臺獲取方法
@RequestMapping("test05.action")
//按照name相同自動引數系結賦值
public ModelAndView test05(Person person){
//springMVC可以將表單的資料賦值給 一個javaBean物件
System.out.println(person.getUsername());
System.out.println(person.getPassword());
System.out.println(person.getBirthday().getYear());
System.out.println(person.getBirthday().getMonth());
System.out.println(person.getBirthday().getDay());
ModelAndView mv= new ModelAndView();
mv.setViewName("main");
return mv;
}
前臺jsp寫法
<form method="post" action="${pageContext.request.contextPath}/registerPerson.action">
用戶名: <input type="text" name="username" /><br/>
用戶密碼: <input type="text" name="password"/><br/>
年 <input type="text" name="birthday.year"/><br/>
月<input type="text" name="birthday.month"/><br/>
日<input type="text" name="birthday.day"/><br/>
<input type="submit" value="添加"/><br/>
</form>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/174614.html
標籤:其他
上一篇:黑馬程式員第三天
下一篇:多檔案上傳你學廢了嗎?
