1. 程式人生 > >@Controller @RequestMapping @

@Controller @RequestMapping @ 阿新 發佈:2018-11-06

版權宣告:版權所有,請勿侵權
轉自:
https://blog.csdn.net/Smart_YC/article/details/52979982
@Controller

1:spring mvc 中將 controller 認為是 MVC中的C --控制層

2:規範命名 類名 xxxController

3:如果不基於註解: 該類需要繼承 CommandController 或者 其他很多 參見 spring幫助

   如果基於註解:在類名前  加上         @controller   

4:補充:將類名前加上該註解,當spring啟動 或者web服務啟動 spring會自動掃描所有包(當然,這個可以設定)

     作用:  就是告訴伺服器  這個類是MVC中的C    這個類可以接收使用者請求    處理使用者請求

問題:如何接收使用者請求
1:假設使用者請求URL 是: http://localhost:8080/專案名/xxx.do do不do都一樣 不管這個do 你用什麼都可以

 2:這個時候,spring開始在所有的 C  中,找對應的處理請求的方法

 3:在任意的可以C的類中,在你想要處理此請求的方法定義的前面 

     @RequestMapping("/xxx")          這個時候的xxx  就是使用者請求的xxx     不管do

     public  String  方法名()

     {

       return  “aaa”;                          

        返回一個字串,非常有用   要注意   用來決定要顯示的MVC的 V  檢視層 是哪個 

      }

問題:如何讓spring 去掃描類 建立關聯

   1:在配置檔案中  (spring)的 假設是 mvc.xml  中

   2:加入 <context:component-scan  base-package="包路徑"/>  

問題 如何返回到檢視層 V

 1: 解決:此時,需要在配置檔案中,加入檢視解析器    有很多種 ,太多了 

 2:這裡用基於jsp/jstl  檢視

 3:在web.xml 中加入bean 配置
   <property  name="prefix" value="/WEB-INF/views"/>                     字首

  <property  name="suffix"   value=".jsp"/>                                        字尾

小結:
1:spring 中的C 一般起類名 XXXController 在這個類裡面 需要加入@controller 標誌這個類可以作為請求處理類 也就是 控制類

2:這個控制類裡面可以有很多方法,哪個方法用來處理使用者請求,就在那個方法前面 加 @RequestMapping(“/xxxxx請求路徑”)

3;當請求處理完畢後 返回值 決定了 該處理完畢後 使用者將跳轉到那個頁面 這個很重要

4:例如

@RequestMapping("/xxx") 這個時候的xxx 就是使用者請求的xxx 不管do

     public  String  方法名()

     {

         return  “aaa”;                         

        返回一個字串,非常有用   要注意   用來決定要顯示的MVC的 V  檢視層 是哪個 

   }

返回 aaa 根據配置檔案中的 檢視處理器配置 加入字首 字尾

頁面將跳轉到 /WEB-INF/views/aaa.jsp

@RequestMapping
RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。
類定義處:規定初步的請求對映,相對於web應用的根目錄;
方法定義處:進一步細分請求對映,相對於類定義處的URL。如果類定義處沒有使用該註解,則方法標記的URL相對於根目錄而言;
RequestMapping註解有六個屬性,下面我們把她分成三類進行說明。

還有一個注意的,@RequestMapping的預設屬性為value,所以@RequestMapping(value="/example")和@RequestMapping("/example")是等價的。
@RequestMapping除了可以指定URL對映外,還可以指定“請求方法、請求引數和請求頭”的對映請求
註解的value、method、params及headers分別指定“請求的URL、請求方法、請求引數及請求頭”。它們之間是與的關係,聯合使用會使得請求的對映更加精細。
 2.1 method屬性可以指定請求的型別,http中規定請求有四種類型:get,post,put,delete。其值在列舉型別RequestMethod中有規定。
2.2 params和headers支援簡單的表示式:
  —— params1:表示請求必須包含名為params1的請求引數
   —— !params1:表示請求不能包含名為params1的請求引數
  —— params1 != value1:表示請求必須包含名為params1的請求引數,但是其值不能是value1
  —— {“params1 = value1”, “param2”}:表示請求必須包含名為params1和params2兩個請求引數,且params1的值必須為value1
2.3 Ant風格資源地址支援3種萬用字元:
   —— ? : 匹配檔名中的一個字元
   —— * : 匹配檔名中的任意多個字元(至少有一個字元)
   —— ** : 匹配多層路徑(至少有一層)

@RequestMapping支援Ant風格的URL:

—— /user/create?? 匹配/user/createAA、/user/createBB等URL (??匹配任意兩個字元)
   —— /user/*/createUser 匹配/user/aaa/createUser、/user/bbb/createUser等URL (*匹配任意字元)
   —— /user/**/createUser 匹配/user/createUser、/user/aaa/bbb/createUser等URL (**匹配任意多層路徑)

注意:其?和*必須要有,如果為空,則不符合
  2.4 @PathVariable 對映URL繫結的佔位符
  可以在控制器處理方法的入參中使用 @PathVariable 獲取到URL中佔位符引數。 URL中的{xxx}佔位符可以通過 @PathVariable(“xxx”) 繫結到操作方法的入參中。

@RequestBody

作用:

  i) 該註解用於讀取Request請求的body部分資料,使用系統預設配置的HttpMessageConverter進行解析,然後把相應的資料繫結到要返回的物件上;

  ii) 再把HttpMessageConverter返回的物件資料繫結到 controller中方法的引數上。

使用時機:

A) GET、POST方式提時, 根據request header Content-Type的值來判斷:

application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的資料@RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理);
multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的資料);
其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的資料,必須使用@RequestBody來處理);

B) PUT方式提交時, 根據request header Content-Type的值來判斷:

application/x-www-form-urlencoded, 必須;
multipart/form-data, 不能處理;
其他格式, 必須;

說明:request的body部分的資料編碼格式由header部分的Content-Type指定;
@ResponseBody
作用:

  該註解用於將Controller的方法返回的物件,通過適當的HttpMessageConverter轉換為指定格式後,寫入到Response物件的body資料區。

使用時機:

  返回的資料不是html標籤的頁面,而是其他某種格式的資料時(如json、xml等)使用;

作者:放眼未來活在當下
來源:CSDN
原文:https://blog.csdn.net/Smart_YC/article/details/52979982
版權宣告:本文為博主原創文章,轉載請附上博文連結!