控制器(Controller)
控制器(Controller)是MVC體系中的核心,它負責處理瀏覽器發起的所有請求和決定回應內容的邏輯處理,控制器就是一個標準的Java類,不需要繼承任何基類,透過類別中的方法向外部暴露接口,該方法的返回結果將決定向瀏覽器響應的具體內容;
下面透過範例編寫WebMVC模組中的控制器:
@Controller public class DemoController { @RequestMapping("/sayhi") public IView sayHi() { return View.textView("Hi, YMPer!"); } }
啟動Tomcat服務並造訪http://localhost:8080/sayhi
,得到的輸出結果將會是:Hi, YMPer!
從上述程式碼看到有兩個註解,分別是:
#@Controller:宣告一個類別為控制器,框架在啟動時會自動掃描所有宣告該註解的類別並註冊為控制器;
name:控制器名稱,預設為「」(此參數暫時未使用);
singleton:指定控制器是否為單例,預設為true;
@RequestMapping:聲明控制器請求路徑映射,作用域範圍:類別或方法;
value:控制器請求路徑映射,必選參數;
method[]:允許的請求方式,預設為GET方式,取值範圍:GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE;
header[]:請求頭中必須存在的頭名;
param[]:請求中必須存在的參數名稱;
範例一:
建立非單例控制器,其中的控制器方法規則如下:
- 控制器方法僅支援POST和PUT方式存取;
- 請求頭參數中必須包含x-requested-with=XMLHttpRequest(即判斷是否AJAX請求);
- 請求參數中必須存在name參數;
@Controller(singleton = false) @RequestMapping("/demo") public class DemoController { @RequestMapping(value = "/sayhi", method = {Type.HttpMethod.POST, Type.HttpMethod.PUT}, header = {"x-requested-with=XMLHttpRequest"}, param = {"name=*"}) public IView sayHi() { return View.textView("Hi, YMPer!"); } }
範例說明:
本範例主要展示如何使用@Controller和@RequestMapping註解來對控制器和控制器方法對進配置;
控制器方法必須使用public修飾,否則無效;
由於控制器上也宣告了@RequestMapping註解,所以控制器方法的請求路徑映射將變成: /demo/sayhi;
範例二:
上例中展示了對請求的一些控制,以下展示如何對回應結果進行控制,規則如下:
- 透過註解設定回應頭參數:
##透過註解設定控制器返回視圖及內容:"Hi, YMPer!"
- from = "china"
- age = 18
@Controller @RequestMapping("/demo") public class DemoController { @RequestMapping("/sayhi") @ResponseView(value = "Hi, YMPer!", type = Type.View.TEXT) @ResponseHeader({ @Header(name = "from", value = "china"), @Header(name = "age", value = "18", type = Type.HeaderType.INT)}) public void sayHi() { } }
本例中用到了三個註解:
@ResponseView:宣告控制器方法預設回傳視圖物件, 僅在方法無回傳值或傳回值無效時使用
name:視圖範本檔案路徑,預設為"";
type:檢視檔案類型,預設為Type.View.NULL;
-
#@ResponseHeader:設定控制器方法回傳結果時增加回應頭參數;
value[]:回應頭@Header參數集合;
@Header:宣告一個請求回應Header鍵值對,僅用於參數傳遞;
#name:回應頭參數名稱,必選參數;
value:回應頭參數值,預設為"";
type:回應頭參數類型,支援STRING, INI, DATE,預設為Type.HeaderType.STRING;