SpringMVC之Controller及RestFul

四是偷、Controller及RestFul

目錄:控制器Controller蛋铆、實現Controller接口放接、注解@Controller纠脾、RequestMapping、RestFul風格

1.通過配置實現

  • 控制器復雜提供訪問應用程序的行為糊渊,通常通過接口定義或注解定義兩種方法實現汉操。
  • 控制器負責解析用戶的請求并將其轉換為一個模型磷瘤。
  • 在Spring MVC中一個控制器類可以包含多個方法。
  • 在Spring MVC中针炉,對于Controller的配置方式有很多種篡帕。

2.實現Controller接口

Controller是一個接口镰烧,在org.springframework.web.servlet.mvc包下怔鳖,接口中只有一個方法结执。

//實現該接口的類獲得控制器功能
public interface Controller {
  //處理請求且返回一個模型與視圖對象
  ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception; 
}

測試
①新建一個Moudle,將上述代碼進行如下修改懂傀。
Ⅰ刪掉HelloController蹬蚁。
Ⅱmvc的配置文件只留下視圖解析器缚忧。
②編寫一個Controller類ControllerTest1。

//定義控制器 
//注意:不要導錯jar包蒙具,實現Controller接口后重寫方法
public class ControllerTest1 implements Controller {
  public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 
    //返回一個模型視圖對象 
    ModelAndView mv = new ModelAndView(); 
    mv.addObject("msg","Test1Controller"); 
    mv.setViewName("test"); 
    return mv; 
  } 
}

3)編寫完畢后,去Spring配置文件中注冊請求的bean衡招。(name對應請求路徑始腾,class對應處理請求的類)

<bean name="/t1" class="com.kuang.controller.ControllerTest1"/>

4)編寫前端test.jsp,注意在WEB-INF/jsp目錄下編寫穗椅,對應視圖解析器。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>SpringMVC</title>
  </head>
  <body>
    ${msg}
  </body>
</html>

5)配置Tomcat運行測試宣鄙。(http://localhost:8080/t1
說明:實現接口Controller定義控制器的辦法比較老冻晤。
缺點:一個控制器中只有一個方法明也,如果要多個方法則需要定義多個Controller,定義的方式比較麻煩蜻势。

3.注解@Controller

@Controller注解類型用于聲明Spring類的實例是一個控制器握玛。
Spring可以使用掃描機制來找到應用程序中所有基于注解的控制器類甫菠,為了保證Spring能找到相應的控制器挠铲,需要在配置文件中聲明組件掃描。

<!-- 自動掃描指定的包寂诱,下面所有注解類交給IOC容器管理 -->
<context:component-scan base-package="com.ping.controller"/>

增加一個ControllerTest2類拂苹,通過注解來實現。

//@Controller注解的類會自動添加到Spring上下文中 
@Controller 
public class ControllerTest2{ 
  //映射訪問路徑 
  @RequestMapping("/t2") 
  public String index(Model model){ 
    //Spring MVC會自動實例化一個Model對象用于向視圖中傳值 
    model.addAttribute("msg", "ControllerTest2"); 
    //返回視圖位置 
    return "test"; 
  } 
}

運行Tomcat痰洒,進行測試瓢棒。
結論:可以發(fā)現兩個請求都可以指向一個視圖,但是頁面結果的結果是不一樣的丘喻,從這里可以看出視圖是被復用的脯宿,而控制器與視圖之間是弱偶合關系。

4.RequestMapping

@RequestMapping
@RequestMapping注解用于映射url到控制器類或一個特定的處理程序方法泉粉×梗可用于類或方法上叽躯。用于類上,表示類中的所有響應請求的方法都是以該地址作為父路徑憨募。
只注解在方法上面:

@Controller public class TestController { 
@RequestMapping("/t1") 
  public String test(){ 
    return "test"; 
  } 
}

訪問路徑http://localhost:8080/項目名/t1
注解類與方法:

@Controller 
@RequestMapping("/admin") 
public class TestController { 
  @RequestMapping("/t1") 
  public String test(){ 
    return "test"; 
  } 
}

訪問路徑http://localhost:8080/項目名/admin/t1 , 需要先指定類的路徑再指定方法的路徑媳危。

5.RestFul 風格

概念:Restful就是一個資源定位及資源操作的風格暮蹂。不是標準也不是協議,只是一種風格∏诚ぃ基于這個風格設
計的軟件可以更簡潔,更有層次,更易于實現緩存等機制。
資源:互聯網所有的事物都可以被抽象為資源。
功能:資源操作:使用POST、DELETE、PUT弟塞、GET,使用不同方法對資源進行操作,分別對應添加、 刪除、修改、查詢。
傳統方式操作資源:通過不同的參數來實現不同的效果隔崎,方法單一钓株。(post 和 get)
http://127.0.0.1/item/queryItem.action?id=1 查詢摆霉,GET
http://127.0.0.1/item/saveItem.action 新增,POST
http://127.0.0.1/item/updateItem.action 更新向挖,POST
http://127.0.0.1/item/deleteItem.action?id=1 刪除徊件,GET或POST
使用RestFul操作資源:可以通過不同的請求方式來實現不同的效果部翘。(請求地址一樣,但是功能可以不同)
http://127.0.0.1/item/1 查詢蛔翅,GET
http://127.0.0.1/item 新增,POST
http://127.0.0.1/item 更新爵政,PUT
http://127.0.0.1/item/1 刪除徽千,DELETE
測試
①新建一個類RestFulController。

@Controller public class RestFulController { 
}

②在Spring MVC中可以使用@PathVariable注解荠诬,讓方法參數的值對應綁定到一個URL模板變量上钧嘶。

@Controller
public class RestFulController {
  //映射訪問路徑
  @RequestMapping("/commit/{p1}/{p2}")
  public String index(@PathVariable int p1, @PathVariable int p2, Model model){
    int result = p1+p2;
    //Spring MVC會自動實例化一個Model對象用于向視圖中傳值
    model.addAttribute("msg", "結果:"+result);
    //返回視圖位置
    return "test";
  } 
}

使用路徑變量的好處
Ⅰ使路徑變得更加簡潔。
Ⅱ獲得參數更加方便苟呐,框架會自動進行類型轉換。
Ⅲ通過路徑變量的類型可以約束訪問參數局冰,如果類型不一樣测蘑,則訪問不到對應的請求方法,如這里訪問是的路徑是/commit/1/a康二,則路徑與方法不匹配碳胳,而不會是參數轉換失敗。
③修改對應的參數類型沫勿,并進行再次測試挨约。

//映射訪問路徑 
@RequestMapping("/commit/{p1}/{p2}") 
public String index(
@PathVariable int p1, @PathVariable String p2, Model model){ 
  String result = p1+p2; 
  //Spring MVC會自動實例化一個Model對象用于向視圖中傳值 
  model.addAttribute("msg", "結果:"+result); 
  //返回視圖位置 
  return "test"; 
}

使用method屬性指定請求類型
用于約束請求的類型,可以收窄請求范圍产雹。指定請求謂詞的類型如GET诫惭、POST、HEAD蔓挖、OPTIONS夕土、PUT、PATCH瘟判、DELETE怨绣、TRACE等。
測試
Ⅰ增加一個方法拷获。

//映射訪問路徑蜓萄,必須是POST請求 
@RequestMapping(value = "/hello",method = {RequestMethod.POST}) 
public String index2(Model model){ 
  model.addAttribute("msg", "hello!"); 
  return "test"; 
}

Ⅱ使用瀏覽器地址欄進行訪問默認是Get請求惶凝,會報錯405研乒。
Ⅲ如果將POST修改為GET則沒有錯誤摔桦。

//映射訪問路徑轴猎,必須是Get請求 
@RequestMapping(value = "/hello",method = {RequestMethod.GET}) 
public String index2(Model model){ 
  model.addAttribute("msg", "hello!"); 
  return "test"; 
}

小結:Spring MVC的@RequestMapping注解能夠處理HTTP請求的方法啥刻,比如GET刺下、PUT共郭、POST树埠、DELETE以及PATCH糠馆。所有的地址欄請求默認都會是HTTP GET類型的。
方法級別的注解變體有如下幾個:組合注解

@GetMapping 
@PostMapping 
@PutMapping 
@DeleteMapping 
@PatchMapping

@GetMapping是一個組合注解它所扮演的是@RequestMapping(method =RequestMethod.GET)的一個快捷方式怎憋,一般使用這種方式會比較多又碌。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末九昧,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子毕匀,更是在濱河造成了極大的恐慌铸鹰,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皂岔,死亡現場離奇詭異蹋笼,居然都是意外死亡,警方通過查閱死者的電腦和手機剖毯,發(fā)現死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門土铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胶滋,“玉大人,你說我怎么就攤上這事究恤。” “怎么了镀迂?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵丁溅,是天一觀的道長涯穷。 經常有香客問我,道長赚瘦,這世上最難降的妖魔是什么病瞳? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任亲善,我火速辦了婚禮顿肺,結果婚禮上袍睡,老公的妹妹穿的比我還像新娘。我一直安慰自己涧狮,他們只是感情好涉枫,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著久窟,像睡著了一般斥扛。 火紅的嫁衣襯著肌膚如雪棱烂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天憔杨,我揣著相機與錄音鸟赫,去河邊找鬼。 笑死消别,一個胖子當著我的面吹牛抛蚤,可吹牛的內容都是我干的。 我是一名探鬼主播妖啥,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼霉颠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荆虱?” 一聲冷哼從身側響起蒿偎,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怀读,沒想到半個月后诉位,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡菜枷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年苍糠,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啤誊。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡岳瞭,死狀恐怖拥娄,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情瞳筏,我是刑警寧澤稚瘾,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站姚炕,受9級特大地震影響摊欠,放射性物質發(fā)生泄漏。R本人自食惡果不足惜柱宦,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一些椒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掸刊,春花似錦免糕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苍柏,卻和暖如春尼斧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背试吁。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工棺棵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熄捍。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓烛恤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親余耽。 傳聞我的和親對象是個殘疾皇子缚柏,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容

  • 4、控制器Controller 4.1碟贾、控制器Controller 控制器復雜提供訪問應用程序的行為币喧,通常通過接口...
    森小森_閱讀 154評論 0 0
  • 一杀餐、控制器Controller 控制器復雜提供訪問應用程序的行為,通常通過接口定義或注解定義兩種方法實現朱巨。 控制器...
    賭書潑茶_deea閱讀 141評論 0 0
  • SpringMVC介紹 Spring web mvc 和Struts2都屬于表現層的框架史翘,它是Spring框架的一...
    day_Sunny閱讀 748評論 0 0
  • 前言 本文主要是講解在Controller中的開發(fā),主要的知識點有如下: 編碼過濾器 使用注解開發(fā) 注解@Requ...
    Java3y閱讀 983評論 0 7
  • 對于java中的思考的方向,1必須要看前端的頁面琼讽,對于前端的頁面基本的邏輯必峰,如果能理解最好,不理解也要知道幾點钻蹬。 ...
    神尤魯道夫閱讀 814評論 0 0