SpringMVC框架下的B/S前後臺的數據交互
僅在在數據的角度做對基於SpringMVC框架的前後臺數據交互做片面總結,可能許多錯誤,歡迎指出。
- 一、後臺傳送數據,有常用的兩種類型四種方式
-
A類:跳轉頁面攜帶的數據,即前臺請求頁面,後臺發送頁面的時候將頁面和數據一起返回給前臺。
使用@RequestMapping註解與HttpServletRequest 類,如下:
@RequestMapping("/url") public String demo(HttpServletRequest request) { request.setAttribute("obj", "there is your data"); return "JSPpagename"; }
使用@RequestMapping註解與ModelAndView 類,如下:
@RequestMapping("/url") public ModelAndView demo() { ModelAndView mv = new ModelAndView (); mv.setViewName("JSPpagename"); mv.addObject("obj", "there is your data"); return mv; }
使用@RequestMapping註解與Model 類,如下:
@RequestMapping("/url") public String demo(Model model) { model.addAttribute("obj", "there is your data"); return "JSPpagename"; }
使用@RequestMapping註解與Map 接口,如下:
@RequestMapping("/url") public String demo(Map<String,Object> paramMap) { paramMap.put("obj", "there is your data"); return "JSPpagename"; }
-
B類:非跳轉頁面攜帶的數據,即前臺單純向後臺請求數據,多用於AJAX。
- 需要使用@RequestMapping註解與@ResponseBody註解,如下:
//返回的類型是字符串 @ResponseBody @RequestMapping("/url") public String demo() { return "yourdata"; } //如果想要返回複雜類型的數據,那麼你需要你個將對象字符串化的轉換器 //一般都會使用jackson解析複雜對象到json字符串。
- 需要使用@RequestMapping註解與@ResponseBody註解,如下:
- 二、前臺接收數據,有常用的兩種類型兩種方式
-
A類 :跳轉頁面攜帶的數據。
在頁面中使用EL表達式接受值,如:
${obj}
-
B類: 非跳轉頁面攜帶的數據。
- 通過AJAX 的 success(data)方法中的data獲取值。
- 三、前臺傳送數據,有常用的兩種提交類型五種方式。
-
A類 : GET提交數據類型。
使用URL提交,即以&符號連接的鍵值對字符串數據拼接於URL尾並以 ? 分割數據與URL,如下:
http://localhost:8080/myproject/login?name=INK_FUNC&age=12
使用 form 表單提交數據時將 method 屬性設置爲 GET。
使用AJAX提交數據時將 type 屬性設置爲 GET。
-
B類:POST提交數據類型。
使用 form 表單提交數據時將 method 屬性設置 POST。
使用AJAX提交數據時將 type 屬性設置爲 POST 。
- 四、後臺接受數據,有常用的兩種類型5種方式。
-
A 類:GET提交的數據。
使用URL提交的數據,將用到@RequestMapping註解或@RequestParam註解與String類或Integer類等基本類型,如下:
//第一種情況:參數名必須與url中提交的鍵值對數據中的鍵值名一樣 @RequestMapping("/url") public String demo(String name,Integer age) { return "JSPpagename"; } //或者第二種情況:參數名任意,但是@RequestParam中value值必須和url中提交的鍵值對數據中的鍵值名一樣。 @RequestMapping("/url") public String demo(@RequestParam(value="name")String anyname,@RequestParam(value="age")Integer anyage) { return "JSPpagename"; }
GET類型表單提交的數據接受方式,參照URL提交的數據接受方式,如果有和表單對應的POJO類,亦可以如下:
//User 類 即是封裝的表單提交的數據集合 @RequestMapping("/url") public String demo(User userpojo) { return "JSPpagename"; }
GET類型AJAX提交的數據接受方式,參照URL提交的數據接收方式。
-
B類:POST提交的數據。
POST類型的表單提交,參照 GET類型的表單提交。
POST類型的ajax提交。
$.ajax({ url:"url",//your action url type:"post",//post or get async:true,//true or false timeout:1000,//請求超時時間(毫秒 cache:true,//true or false,是否從瀏覽器緩存中加載請求信息 contentType:"application/x-www-form-urlencoded"//提交數據編碼類型,還有其他類型,比如 application/json等等 dataType:"json",//預期服務器返回的數據類型,果不指定,jQuery 將自動根據 HTTP 包 MIME 信息返回 responseXML 或 responseText,常用的有xml,html,script,json等等。 data:data,//your data success:function(data){}//do something error:function(msg){}//do something })
一些補充:
- 在數據的角度來說,GET 和 POST 請求對它的影響主要體現在請求頭中放置的位置,本身類型。GET請求傳遞數據和URL以 問號(?)分割,之前是URL,之後是數據,並且數據以鍵值對中的值存在,鍵值對之間用位與符號(&)鏈接的字符串,而POST請求,不僅僅限於鍵值對字符串,還有其他能提供數據交換能力的文件類型,如,xml,json等等。
- 不使用如何第三方框架對前臺提交的數據進行轉換的情況下,SpringMVC方法上不用任何參數映射註解控制時候,能處理鍵值對字符串,並且能自動映射方法參數。
- 在AJAX中,GET請求提交數據,在 data 屬性上的數據,必須是鍵值對字符串。 而POST請求提交數據時候,可以通過 contentType 指定數據類型,爲後臺進行數據轉換提供指引。當使用默認 contentType 的時候,在data屬性上應提供一個json對象或鍵值對字符串,此時後臺接受數據的類型爲後臺接受數據A類。
- 在AJAX中,POST請求提交數據,使用默認 contentType,如果提交的數據是字符串類型,一類是普通的字符串類型,一類是鍵值對字符串類型(如果提供的是json對象,jquery會自動轉換爲鍵值對字符串類型),在後臺的方法參數上使用 @RequestBody註解一個字符串參數,可以將字符數據完全綁定到參數上,這種情況多用於普通字符串,並自己解析數據。
- 如果提交的數據是json字符串格式的,需要將 contentType 屬性 設置爲 application/json ,並且使用POST請求提交,在後臺你需要使用第三方json數據轉換框架來進行參數數據綁定。
- 在form表單提交的時候,後臺使用POJO參數來接收數據,並且POJO中存在非String類型的屬性,此時與之對應的表單中的數據項爲空,在提交的時候,會出現400錯誤,即請求錯誤。
- 在AJAX POST請求提交數據時候,如果後臺無法轉換數據,將會出現415錯誤,即媒體類型不符。這是由於 contentType 屬性設置的屬性值即數據類型,後臺無法進行轉換,或者說後臺沒有相應的轉換器(HttpMessageConverter),你需要在SpringMVC的配置文件中配置或者使用其他其他配置方式。
- 在SpringMVC中參數數據綁定上還有許多註解有非常強大的功能。