什麼是資料繫結?
這個引數非常重要。web專案其實就是客戶端跟伺服器之間的互動,客戶端傳送請求,伺服器對請求做出響應。
客戶端傳送請求的時候,是需要攜帶引數過來的。比如查詢課程的詳細資訊,前台就會將課程的id傳給後台,後台通過id在資料庫裡面檢索出該門課程的所有的詳細資訊,然後把這個結果集封裝成乙個模型資料,再把這個模型資料返回給前台做乙個響應,這就是完整的流程。
springmvc之前獲取引數的操作:serlvet當中的doget和dopost方法就是用來處理這種請求的。
這兩個方法中形參列表有預設的引數,是httpservletrequest型別的request物件,通過這個request物件獲取引數
但是通過這個request物件會有乙個問題,拿出來的都是string型別的,比如說前台傳過來乙個int型別的id,那我們在後台從request物件拿出來之後,它是乙個string型別的,因此就需要做乙個資料型別的轉換,將string型別轉換為int型別。如果說要新增乙個課程,就需要在前端頁面輸入相關屬性,比如輸入它的id,名稱以及**等。form表單提交之後,會作為引數傳給後台。在後台的業務方法中,通過request物件把這些引數拿出來之後,還是需要將它封裝成乙個課程物件。
也就是說通過原生的方式需要進行一系列重複的操作,包括資料型別的轉換以及封裝等繁瑣的步驟。
如果使用springmvc框架,springmvc框架就會幫助我們完成這些一系列步驟,不需要自己去寫了。
springmvc框架業務層當中,需要什麼就在形參列表定義什麼,假如說要獲取int型別的id,那就在形參列表定義乙個int型別的形參,springmvc框架會自動的將http請求的引數拿出來繫結到形參當中
如果說要做乙個新增課程的操作,那就在形參列表當中,定義乙個課程型別的物件,springmvc框架會自動從請求當中的引數拿出來,封裝到這個物件當中。springmvc框架會幫我們完成這樣的操作。我們在業務方法中直接拿到現成的、需要的結果去完成後續的業務邏輯操作即可。
那麼springmvc框架底層如何實現這樣的過程的呢?
通過handleradapter去呼叫httpmessageconverter元件去完成資料繫結的,把這個資料繫結到handler的業務方法的形參列表當中。
完成流程:前端傳送請求過來,被dispatcherservlet所捕獲,dispatcherservlet會將這個請求對映到handler,然後去呼叫handleradapter,handleradapter在執行業務方法之前,會呼叫httpmessageconverter元件,將http請求的引數拿出來進行資料型別轉換以及封裝等一系列步驟操作,把最終繫結的結果直接賦值給handler的業務方法的形參列表當中
這樣我們在業務方法當中就可以直接拿這個封裝好的、現成的形參去完成後續的業務邏輯操作。也就是說在springmvc框架中,不需要完成對引數的一些額外的處理,springmvc框架會自動的幫我們完成。
常用的資料型別:基本資料型別、包裝類、陣列、物件、集合(list,set,map)、json
下面是例項的一些主要**:
springmvc.xml
<?xml version="1.0" encoding="utf-8"?>
控制層:
package com.lzy.controller;
import com.lzy.dao.coursedao;
import com.lzy.entity.course;
import com.lzy.entity.courselist;
import com.lzy.entity.coursemap;
import com.lzy.entity.courseset;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestbody;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.responsebody;
import org.springframework.web.servlet.modelandview;
@controller
public class databindcontroller
//測試包裝類的繫結
@responsebody
public string packagetype(@requestparam(value = "id") integer id)
//測試陣列
//第一步 拼接字串
//第二步 遍歷陣列
@responsebody
public string arraytype(string name)
//將string型別的值返回給前端
return sbf.tostring();
}@autowired
private coursedao coursedao;
//測試物件
//由於返回的是modelandview,modelandview裡帶有檢視資訊,直接返回檢視即可,這時候就不需要新增@responsebody了
public modelandview pojotype(course course)
//測試list集合
public modelandview listtype(courselist courselist)
//響應
modelandview modelandview = new modelandview();
//新增檢視資訊
modelandview.setviewname("index");
//新增模型資料
modelandview.addobject("courses", coursedao.getall());
return modelandview;
}//測試map集合
public modelandview maplist(coursemap coursemap)
//響應
modelandview modelandview = new modelandview();
//新增檢視資訊
modelandview.setviewname("index");
//新增模型資料
modelandview.addobject("courses", coursedao.getall());
return modelandview;
}//測試set集合
public modelandview settype(courseset courseset)
//響應
modelandview modelandview = new modelandview();
//新增檢視資訊
modelandview.setviewname("index");
//新增模型資料
modelandview.addobject("courses", coursedao.getall());
return modelandview;
}//測試json
public course jsontype(@requestbody course course)
}
springMVC資料繫結
1.資料繫結的定義 2.常用的資料繫結型別 3.具體使用方法 在搭建好springmvc環境下新增註解 requestparam value 表單對應的name 即可完成資料繫結 package com.yzy.controller import com.yzy.entity.course impo...
Spring MVC資料繫結 複雜資料繫結
接上篇spring mvc資料繫結 簡單資料繫結 1 繫結包裝pojo 所謂的包裝pojo,就是在乙個pojo中包含另乙個簡單pojo。例如,在訂單物件中包含使用者物件。這樣在使用時,就可以通過訂單查詢到使用者資訊。1.在po包下新建乙個orderspojo public class orders2...
SpringMVC資料繫結流程
1.spring mvc 框架將 servletrequest 物件及目標方法的入參例項傳遞給 webdatabinde ctory 例項,以建立 databinder 例項物件 2.databinder 呼叫裝配在 spring mvc 上下文中的conversionservice 元件進行資料型...