天天看點

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

文章目錄

  • 一、RESTful風格
  • 1、介紹
  • 2、執行個體
  • (1)傳統方式
  • (2)RESTful方式
  • 1)通過屬性指定請求類型
  • 2)通過注解指定請求類型
  • 二、重定向與請求轉發
  • Servlet方式
  • Spring MVC方式
  • 總結:請求轉發與重定向
  • 三、接收請求參數
  • Servlet方式
  • Spring MVC方式
  • 1、預設對應:請求參數與方法參數同名
  • 2、@RequestParam注解
  • (1)接收到屬性中
  • (2)接收到對象中
  • 1)預設對應:請求參數與對象字段同名
  • 四、資料傳遞到前端
  • (1)ModelAndView
  • (2)ModelMap
  • (3)Model

一、RESTful風格

1、介紹

Restful就是一個資源定位及資源操作的風格。不是标準也不是協定,隻是一種風格。基于這個風格設計的軟體可以更簡潔,更有層次,更易于實作緩存等機制,進而具有高效的特點。

使用POST、DELETE、PUT、GET,使用不同方法對資源進行操作。分别對應 添加、 删除、修改、查詢。(而傳統方式隻有GET,POST兩種方式)

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

2、執行個體

(1)傳統方式

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

(2)RESTful方式

使用 @PathVariable 注解,指定請求中的參數

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
1)通過屬性指定請求類型

我們也可以使用@RequestMapping注解中的method屬性指定請求類型

用于限制請求的類型,可以收窄請求範圍。指定請求謂詞的類型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
2)通過注解指定請求類型

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping

@PatchMapping

這些注解都整合了@RequestMapping以及它的屬性method =RequestMethod.請求方式

二、重定向與請求轉發

Servlet方式

Spring MVC 中依舊可以用底層Servlet 方式,這樣也就不再走視圖解析器了

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

Spring MVC方式

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

總結:請求轉發與重定向

有一篇很好的博文

摘選與本文例子有關的部分内容:

請求轉發:request.getRequestDispatcher().forward(request,response):

1、屬于轉發,也是伺服器跳轉,相當于方法調用,在執行目前檔案的過程中轉向執行目标檔案,兩個檔案(目前檔案和目标檔案)屬于同一次請求,前後頁共用一個request,可以通過此來傳遞一些資料或者session資訊,request.setAttribute()和request.getAttribute()。

2、在前後兩次執行後,位址欄不變,仍是目前檔案的位址。

3、不能轉向到本web應用之外的頁面和網站,是以轉向的速度要快。

4、URL中所包含的“/”表示應用程式(項目)的路徑。

重定向:response.sendRedirect():

1、屬于重定向,也是用戶端跳轉,相當于用戶端向服務端發送請求之後,伺服器傳回一個響應,用戶端接收到響應之後又向服務端發送一次請求,一共是2次請求,前後頁不共用一個request,不能讀取轉向前通過request.setAttribute()設定的屬性值。

2、在前後兩次執行後,位址欄發生改變,是目标檔案的位址。

3、可以轉向到本web應用之外的頁面和網站,是以轉向的速度相對要慢。

4、URL種所包含的"/"表示根目錄的路徑。

三、接收請求參數

Servlet方式

同樣,仍可以用底層的Servlet 方式

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

Spring MVC方式

1、預設對應:請求參數與方法參數同名

(不推薦,因為,當代碼較多時,你可能不知道這個參數是方法中的算法參數,還是用于接收前端傳來的請求的參數)

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

2、@RequestParam注解

(1)接收到屬性中

(推薦)

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
(2)接收到對象中

1)預設對應:請求參數與對象字段同名

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)
【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

四、資料傳遞到前端

(1)ModelAndView

ModelAndView:可在存儲資料的同時,設定傳回的邏輯視圖,進行控制展示層的跳轉

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

(2)ModelMap

2、ModelMap:繼承了 LinkedMap ,除了具有自身的一些方法外,還繼承了其父類的方法和特性

【Spring MVC】(第二篇)【超詳細】RESTful風格 + 重定向與請求轉發 + 接收請求參數 + 資料傳遞到前端(ModelAndView,ModelMap與Model)

(3)Model

Model:具有較少且常用的方法,簡化了新手對于Model對象的操作和了解