W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
控制器(Controller)是MVC體系中的核心,它負(fù)責(zé)處理瀏覽器發(fā)起的所有請(qǐng)求和決定響應(yīng)內(nèi)容的邏輯處理,控制器就是一個(gè)標(biāo)準(zhǔn)的Java類(lèi),不需要繼承任何基類(lèi),通過(guò)類(lèi)中的方法向外部暴露接口,該方法的返回結(jié)果將決定向?yàn)g覽器響應(yīng)的具體內(nèi)容;
下面通過(guò)示例編寫(xiě)WebMVC模塊中的控制器:
@Controller public class DemoController { @RequestMapping("/sayhi") public IView sayHi() { return View.textView("Hi, YMPer!"); } }
啟動(dòng)Tomcat服務(wù)并訪問(wèn)http://localhost:8080/sayhi
,得到的輸出結(jié)果將是:Hi, YMPer!
從以上代碼中看到有兩個(gè)注解,分別是:
@Controller:聲明一個(gè)類(lèi)為控制器,框架在啟動(dòng)時(shí)將會(huì)自動(dòng)掃描所有聲明該注解的類(lèi)并注冊(cè)為控制器;
name:控制器名稱(chēng),默認(rèn)為“”(該參數(shù)暫時(shí)未被使用);
singleton:指定控制器是否為單例,默認(rèn)為true;
@RequestMapping:聲明控制器請(qǐng)求路徑映射,作用域范圍:類(lèi)或方法;
value:控制器請(qǐng)求路徑映射,必選參數(shù);
method[]:允許的請(qǐng)求方式,默認(rèn)為GET方式,取值范圍:GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE;
header[]:請(qǐng)求頭中必須存在的頭名稱(chēng);
param[]:請(qǐng)求中必須存在的參數(shù)名稱(chēng);
示例一:
創(chuàng)建非單例控制器,其中的控制器方法規(guī)則如下:
- 控制器方法僅支持POST和PUT方式訪問(wèn);
- 請(qǐng)求頭參數(shù)中必須包含x-requested-with=XMLHttpRequest(即判斷是否AJAX請(qǐng)求);
- 請(qǐng)求參數(shù)中必須存在name參數(shù);
@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!"); } }
示例說(shuō)明:
本例主要展示了如何使用@Controller和@RequestMapping注解來(lái)對(duì)控制器和控制器方法對(duì)進(jìn)配置;
控制器方法必須使用public修飾,否則無(wú)效;
由于控制器上也聲明了@RequestMapping注解,所以控制器方法的請(qǐng)求路徑映射將變成:/demo/sayhi;
示例二:
上例中展示了對(duì)請(qǐng)求的一些控制,下面展示如何對(duì)響應(yīng)結(jié)果進(jìn)行控制,規(guī)則如下:
- 通過(guò)注解設(shè)置響應(yīng)頭參數(shù):
- from = "china"
- age = 18
- 通過(guò)注解設(shè)置控制器返回視圖及內(nèi)容:"Hi, YMPer!"
@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() { } }
本例中用到了三個(gè)注解:
@ResponseView:聲明控制器方法默認(rèn)返回視圖對(duì)象, 僅在方法無(wú)返回值或返回值無(wú)效時(shí)使用
name:視圖模板文件路徑,默認(rèn)為"";
type:視圖文件類(lèi)型,默認(rèn)為T(mén)ype.View.NULL;
@ResponseHeader:設(shè)置控制器方法返回結(jié)果時(shí)增加響應(yīng)頭參數(shù);
value[]:響應(yīng)頭@Header參數(shù)集合;
@Header:聲明一個(gè)請(qǐng)求響應(yīng)Header鍵值對(duì),僅用于參數(shù)傳遞;
name:響應(yīng)頭參數(shù)名稱(chēng),必選參數(shù);
value:響應(yīng)頭參數(shù)值,默認(rèn)為"";
type:響應(yīng)頭參數(shù)類(lèi)型,支持STRING, INI, DATE,默認(rèn)為T(mén)ype.HeaderType.STRING;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: