SpringMVC資料繫結原理

2021-09-23 23:33:43 字數 3763 閱讀 1048

什麼是資料繫結?

這個引數非常重要。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 元件進行資料型...