初見SpringMVC之資料繫結
初見SpringMVC之資料繫結
資料繫結的內容非常通俗易懂,後臺受理網路請求的方法獲取http請求引數的過程就是資料繫結。Spring提供了多種資料繫結的方法:
-
繫結預設資料型別:
SpringMVC中常用的預設資料型別包括,HttpServletRequest,HttpServletResponse,HttpSession。下面通過一個例子介紹,如何通過預設資料型別繫結,獲取請求引數。
匯入SpringMVC相關包,在web.xml中配置DsipatcherServlet
編寫Handler,處理具體的網路請求,在此處是通過Controll註解標識一個Handller,通過RequestMapping完成Handler和url之間的對映。
@Controller
public class DataBinding {
@RequestMapping(value="/defaultDataBinding")
public String defaultDataBinding(HttpServletRequest request){
Stringid = request.getParameter("id");
System.out.println("id="+id);
return "success";
}
}
defaultDataBinding是受理以”/DefaultDataBinging”結尾的網路請求的方法,通過預設引數HttpServletRequest完成資料繫結,而http請求提交的引數均通過 request.getParameter()方法獲取。
- Spring-cofig.xml檔案配置
<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 定義元件掃描器,指定需要掃描的包 -->
<context:component-scan base-package="com.bupt.controller"/>
<!-- 定義檢視解析器 -->
<bean id="viewResolver" class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--設定字首 -->
<propertyname="prefix" value="/WEB-INF/" />
<!--設定字尾 -->
<propertyname="suffix" value=".jsp" />
</bean>
</beans>
- 測試結果:
在瀏覽器輸入如下網址 http://localhost:8080/HelloSpringMV/defaultDataBinding?id=1
可以看見上述通過Get方式提交一個名為id的引數,引數值為1。在控制檯可以看見如下輸出:
-
繫結簡單資料型別
簡單資料型別是指java中的基本資料型別以及String型別,假如提交的引數僅僅只是一個id,可以採用繫結簡答資料型別的方法,而不用通過繫結request後再獲取id資料。在DataBinding類中新增如方法:
- 在Handler中新增方法
@RequestMapping(value="/SimpleDataBinding")
publicString simpleDataBinding(HttpServletRequestrequest,int id){
System.out.println("request中獲取id="+request.getParameter("id"));
System.out.println("id="+id);
return"success";
}
在上述程式碼中,新增了一個引數int id。id直接可以獲取http請求中對應的id欄位。
- 測試,在瀏覽器中輸入如下url:http://localhost:8080/HelloSpringMV/SimpleDataBinding?id=1
從測試結果中可以發現,方法中id引數可以位元組獲取http請求中攜帶的id欄位,同時還可以繫結HttpServletRequest的方法獲取請求引數。這裡需要特別注意的是,http請求中的欄位名稱必須和方法中引數名稱保持一致。假如不一致是不能繫結引數的。
-
繫結POJO資料型別
當http請求攜帶的引數很多的時候,採用繫結簡單資料型別的方法就需要設定過多的方法形參,此時可以利用一個POJO物件充當方法形參,獲取http請求中的引數。下面通過一個驗證使用者登入的例子來介紹繫結POJO資料型別的方式。
使用者登入時候需要提交使用者名稱(userName)和密碼(password)給伺服器去驗證,此時如果採用繫結簡單資料型別的方法時,需要兩個形參來完成資料繫結。此時就可以採用繫結POJO型別的方法獲取請求引數
- 在伺服器一端建立一個POJO類
public class User {
//POJO類的屬性名要和http請求的欄位名保持一致
publicString userName;
publicString password;
publicStringgetUserName() {
return userName;
}
publicvoid setUserName(String userName){
this.userName= userName;
}
publicString getPassword() {
returnpassword;
}
publicvoid setPassword(String password){
this.password= password;
}
}
- 在Handler中新增接收請求的方法:
@RequestMapping("/POJODataBinding")
publicString POJODataBinding(User user){
System.out.println("username="+user.getUserName());
System.out.println("password="+user.getPassword());
return"success";
}
- 在WebConten目錄下,建立一個user.html檔案,顯示一個簡單的登入頁面
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8">
<title>helloSpringMVC</title>
</head>
<body>
<form action="http://localhost:8080/HelloSpringMV/POJODataBinding"
method="post">
使用者名稱<input type="text" name="userName"></input><br>
密碼<input type="password" name="password"></input><br>
<input type="submit"name="submit" value="登入"></input><br>
</form>
</body>
</html>
- 在Springmvc-config.xml檔案中新增一行配置:
<!--dispatcherServelet不攔截靜態資源-->
<mvc:default-servlet-handler/>
- 測試,在瀏覽器中訪問url:http://localhost:8080/HelloSpringMV/user.html
點選提交後,觀察伺服器控制檯輸出:
-
自定義資料繫結
自定義資料繫結,是一種比較冷門的資料繫結方法,假設存在這樣一種情景:請求攜帶的引數型別為A,後臺接收方法的形參型別為B,比如http請求攜帶的引數是日期字串”2017-11-20 4:15:30”,而後臺接收方法的形參型別是Date,在這樣一種引數不匹配的情況下,就需要用到自定義資料繫結。
完成自定義資料繫結,最主要的工作就是設計一個型別轉化器,通過日期轉換的例子介紹自定義資料繫結。
- 構建一個資料型別轉換器,建立一個名為DateConverter的類,繼承Converter介面。
第一個泛型引數代表待轉換型別,第二個泛型引數代表目標轉換型別,所有的轉換工作均只在convert方法中完成。
public class DateConverter implements Converter<String,Date>{
privateString datePattern="yyyy-mm-dd HH:mm:ss";
@Override
publicDate convert(String source) {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
try{
return sdf.parse(source);
} catch(ParseException e) {
// TODO Auto-generated catch block
throw newIllegalArgumentException("無效日期格式,請使用如下格式:"+datePattern);
}
}
}
- 在Spring-config.xml檔案中配置型別轉換器
<pre name="code" class="html" style="box-sizing: border-box; margin: 0px 0px 24px; padding: 0px 16px; overflow-x: auto; background-color: rgb(240, 240, 240); font-family: Consolas, Inconsolata, Courier, monospace; font-size: 12px; line-height: 20px; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 定義元件掃描器,指定需要掃描的包 -->
<context:component-scan base-package="com.bupt.controller" />
<!-- 配置註解驅動 -->
<!-- <mvc:annotation-driven />-->
<mvc:annotation-driven conversion-service="conversionService"/>
<!--dispatcherServelet不攔截靜態資源-->
<mvc:default-servlet-handler/>
<!-- 定義檢視解析器 -->
<bean id="viewResolver" class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--設定字首 -->
<propertyname="prefix" value="/WEB-INF/" />
<!--設定字尾 -->
<propertyname="suffix" value=".jsp" />
</bean>
<!-- 自定義型別轉換器配置 -->
<bean id="conversionService"class=
"org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.bupt.converter.DateConverter"/>
</set>
</property>
</bean></pre>
- 在Handler中新增處理網路請求的方法
@RequestMapping(value="/ConverterDateBinding")
publicString ConverterDateBinding(Date date){
System.out.println(date.toString());
return"success";
}
- 測試,在瀏覽器中輸入如下url http://localhost:8080/HelloSpringMV/ConverterDateBinding?date=2017-11-20%2017:13:02 服務端控制檯輸出結果:
-
繫結陣列型別
假如前端傳送的Http請求攜帶了同名的多個引數時,就會用到繫結陣列型別的情況,比如前端使用核取方塊來完成選定操作的情景。
- 在Handler中新增處理網路請求的方法
@RequestMapping(value="/arrayDateBinding")
publicString arrayDateBinding(String[] users){
for(int i=0;i<users.length;i++){
System.out.println("刪除user="+users[i]);
}
return"success";
}
- 在WebConten下建立array.html檔案
<!DOCTYPE html>
<html>
<head>
<metacharset="UTF-8">
<title>Inserttitle here</title>
</head>
<body>
<form action="http://localhost:8080/HelloSpringMV/arrayDateBinding"
method="POST">
<table width="20%"border=1>
<tr>
<td>選擇</td>
<td>使用者名稱稱</td>
</tr>
<tr>
<td> <input type="checkbox"name="users" value="SmartTu"></input></td>
<td>SmartTu</td>
</tr>
<td> <input type="checkbox"name="users" value="SmartTu1"></input></td>
<td>SmartTu1</td>
</tr>
<td> <input type="checkbox"name="users" value="SmartTu2"></input></td>
<td>SmartTu2</td>
</tr>
</table>
<input type="submit" value="提交">
</form>
</body>
</html>
- 測試
點選提交按鈕看,觀察伺服器控制檯輸出
Reference:
[1] Java企業級應用開發教程 2017.黑馬程式設計師編著
[2] csdn部落格原文
相關文章
- SpringMVC資料繫結demoSpringMVC
- 一文讀懂SpringMVC中的資料繫結SpringMVC
- SpringMVC原始碼之引數解析繫結原理SpringMVC原始碼
- SpringMVC【引數繫結、資料回顯、檔案上傳】SpringMVC
- 資料繫結
- 模板語法之--強制資料繫結和繫結事件監聽事件
- WPF 資料繫結之ValidationRule資料校驗綜合Demo
- Blazor WebAssembly 修仙之途 - 元件與資料繫結BlazorWeb元件
- 第二講、Vue3.x繫結資料、繫結html、繫結屬性、迴圈資料VueHTML
- 【工作篇】再次熟悉 SpringMVC 引數繫結SpringMVC
- Angular | 理解資料繫結Angular
- Binding(一):資料繫結
- React學習筆記之雙向資料繫結React筆記
- SpringMVC的引數繫結-日期格式轉換SpringMVC
- JS雙向資料繫結JS
- Vue資料繫結簡析Vue
- vue資料繫結原始碼Vue原始碼
- 0 到 1 掌握:Vue 核心之資料雙向繫結Vue
- 看得見的資料結構Android版之陣列表(資料結構篇)資料結構Android陣列
- 一篇文章搞定SpringMVC引數繫結SpringMVC
- 資料結構之堆:初學只需一文資料結構
- 初識 SpringMVCSpringMVC
- 資料結構初識資料結構
- 初級資料結構資料結構
- 資料結構(初級)資料結構
- vue雙向資料繫結原理Vue
- Vue資料雙向繫結原理Vue
- angular1資料繫結例子Angular
- DataBinding資料繫結基本講解
- 原生js雙向資料繫結JS
- Study Blazor .NET(四)資料繫結Blazor
- Winform控制元件繫結資料ORM控制元件
- 前端三大框架:資料繫結與資料流前端框架
- WebGL 3D 電信機架實戰之資料繫結Web3D
- 看得見的資料結構Android版之棧篇資料結構Android
- SpringMVC初體驗SpringMVC
- 看得見的資料結構Android版之單連結串列篇資料結構Android
- 看得見的資料結構Android版之雙連結串列篇資料結構Android