版權宣告:版權所有,請勿侵權
轉自: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
版權宣告:本文為博主原創文章,轉載請附上博文連結!