亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Spring mvc Controller和RestFul原理解析

瀏覽:12日期:2023-09-15 18:58:47

控制器Controller

控制器復(fù)雜提供訪問(wèn)應(yīng)用程序的行為,通常通過(guò)接口定義或注解定義兩種方法實(shí)現(xiàn)。 控制器負(fù)責(zé)解析用戶的請(qǐng)求并將其轉(zhuǎn)換為一個(gè)模型。 在Spring MVC中一個(gè)控制器類可以包含多個(gè)方法 在Spring MVC中,對(duì)于Controller的配置方式有很多種

實(shí)現(xiàn)Controller接口

Controller是一個(gè)接口,在org.springframework.web.servlet.mvc包下,接口中只有一個(gè)方法;

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

測(cè)試

編寫(xiě)一個(gè)Controller類,ControllerTest1

// 定義控制器// 注意點(diǎn):不要導(dǎo)錯(cuò)包,實(shí)現(xiàn)Controller接口,重寫(xiě)方法;public class ControllerTest1 implements Controller { public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //返回一個(gè)模型視圖對(duì)象 ModelAndView mv = new ModelAndView(); mv.addObject('msg','Test1Controller'); mv.setViewName('test'); return mv; }}

編寫(xiě)完畢后,去Spring配置文件中注冊(cè)請(qǐng)求的bean;name對(duì)應(yīng)請(qǐng)求路徑,class對(duì)應(yīng)處理請(qǐng)求的類

<bean name='/t1' />

編寫(xiě)前端test.jsp,注意在WEB-INF/jsp目錄下編寫(xiě),對(duì)應(yīng)我們的視圖解析器

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

配置Tomcat運(yùn)行測(cè)試,我這里沒(méi)有項(xiàng)目發(fā)布名配置的就是一個(gè) / ,所以請(qǐng)求不用加項(xiàng)目名,OK!

說(shuō)明:

實(shí)現(xiàn)接口Controller定義控制器是較老的辦法

缺點(diǎn)是:一個(gè)控制器中只有一個(gè)方法,如果要多個(gè)方法則需要定義多個(gè)Controller;定義的方式比較麻煩;

使用注解@Controller

@Controller注解類型用于聲明Spring類的實(shí)例是一個(gè)控制器(在講IOC時(shí)還提到了另外3個(gè)注解);

Spring可以使用掃描機(jī)制來(lái)找到應(yīng)用程序中所有基于注解的控制器類,為了保證Spring能找到你的控制器,需要在配置文件中聲明組件掃描。

<!-- 自動(dòng)掃描指定的包,下面所有注解類交給IOC容器管理 --><context:component-scan base-package='com.xiaohua.controller'/>

增加一個(gè)ControllerTest2類,使用注解實(shí)現(xiàn);

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

運(yùn)行tomcat測(cè)試

可以發(fā)現(xiàn),我們的兩個(gè)請(qǐng)求都可以指向一個(gè)視圖,但是頁(yè)面結(jié)果的結(jié)果是不一樣的,從這里可以看出視圖是被復(fù)用的,而控制器與視圖之間是弱偶合關(guān)系。

RequestMapping@RequestMapping注解用于映射url到控制器類或一個(gè)特定的處理程序方法。可用于類或方法上。用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑。

為了測(cè)試結(jié)論更加準(zhǔn)確,我們可以加上一個(gè)項(xiàng)目名測(cè)試 myweb

只注解在方法上面

@Controllerpublic class TestController { @RequestMapping('/h1') public String test(){ return 'test'; }}

訪問(wèn)路徑:http://localhost:8080 / 項(xiàng)目名 / h1

同時(shí)注解類與方法

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

訪問(wèn)路徑:http://localhost:8080 / 項(xiàng)目名/ admin /h1 , 需要先指定類的路徑再指定方法的路徑;

RestFul風(fēng)格Restful就是一個(gè)資源定位及資源操作的風(fēng)格。不是標(biāo)準(zhǔn)也不是協(xié)議,只是一種風(fēng)格。基于這個(gè)風(fēng)格設(shè)計(jì)的軟件可以更簡(jiǎn)潔,更有層次,更易于實(shí)現(xiàn)緩存等機(jī)制。

功能

資源:互聯(lián)網(wǎng)所有的事物都可以被抽象為資源 資源操作:使用POST、DELETE、PUT、GET,使用不同方法對(duì)資源進(jìn)行操作。 分別對(duì)應(yīng) 添加、 刪除、修改、查詢。

傳統(tǒng)方式操作資源 :通過(guò)不同的參數(shù)來(lái)實(shí)現(xiàn)不同的效果!方法單一,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操作資源 : 可以通過(guò)不同的請(qǐng)求方式來(lái)實(shí)現(xiàn)不同的效果!如下:請(qǐng)求地址一樣,但是功能可以不同!

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

學(xué)習(xí)測(cè)試

在新建一個(gè)類 RestFulController

@Controllerpublic class RestFulController {}

在Spring MVC中可以使用 @PathVariable 注解,讓方法參數(shù)的值對(duì)應(yīng)綁定到一個(gè)URI模板變量上。

@Controllerpublic class RestFulController { //映射訪問(wèn)路徑 @RequestMapping('/commit/{p1}/{p2}') public String index(@PathVariable int p1, @PathVariable int p2, Model model){ int result = p1+p2; //Spring MVC會(huì)自動(dòng)實(shí)例化一個(gè)Model對(duì)象用于向視圖中傳值 model.addAttribute('msg', '結(jié)果:'+result); //返回視圖位置 return 'test'; }}

我們來(lái)測(cè)試請(qǐng)求查看下

使用路徑變量的好處?

使路徑變得更加簡(jiǎn)潔; 獲得參數(shù)更加方便,框架會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換。 通過(guò)路徑變量的類型可以約束訪問(wèn)參數(shù),如果類型不一樣,則訪問(wèn)不到對(duì)應(yīng)的請(qǐng)求方法,如這里訪問(wèn)是的路徑是/commit/1/a,則路徑與方法不匹配,而不會(huì)是參數(shù)轉(zhuǎn)換失敗。

我們來(lái)修改下對(duì)應(yīng)的參數(shù)類型,再次測(cè)試

//映射訪問(wèn)路徑@RequestMapping('/commit/{p1}/{p2}')public String index(@PathVariable int p1, @PathVariable String p2, Model model){ String result = p1+p2; //Spring MVC會(huì)自動(dòng)實(shí)例化一個(gè)Model對(duì)象用于向視圖中傳值 model.addAttribute('msg', '結(jié)果:'+result); //返回視圖位置 return 'test';}

使用method屬性指定請(qǐng)求類型

用于約束請(qǐng)求的類型,可以收窄請(qǐng)求范圍。指定請(qǐng)求謂詞的類型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

我們來(lái)測(cè)試一下:

增加一個(gè)方法

//映射訪問(wèn)路徑,必須是POST請(qǐng)求@RequestMapping(value = '/hello',method = {RequestMethod.POST})public String index2(Model model){ model.addAttribute('msg', 'hello!'); return 'test';}

我們使用瀏覽器地址欄進(jìn)行訪問(wèn)默認(rèn)是Get請(qǐng)求,會(huì)報(bào)錯(cuò)405:

如果將POST修改為GET則正常了;

//映射訪問(wèn)路徑,必須是Get請(qǐng)求@RequestMapping(value = '/hello',method = {RequestMethod.GET})public String index2(Model model){ model.addAttribute('msg', 'hello!'); return 'test';}

小結(jié):

Spring MVC 的 @RequestMapping 注解能夠處理 HTTP 請(qǐng)求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。

所有的地址欄請(qǐng)求默認(rèn)都會(huì)是 HTTP GET 類型的。

方法級(jí)別的注解變體有如下幾個(gè): 組合注解

@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping @GetMapping 是一個(gè)組合注解

它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一個(gè)快捷方式。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 久久99国产一区二区三区 | 日本亚洲精品成人 | 黄色片网站大全 | 久久经典免费视频 | 九九热国产视频 | 欧美日韩黄色片 | 无码专区aaaaaa免费视频 | 国产精品免费视频一区二区三区 | 精品综合久久88色鬼首页 | 91系列在线| 国产一级爱片在线播放 | 永久免费视频网站在线观看 | 国产精品三级国语在线看 | 天天干影视 | 国产成人爱情动作片在线观看 | 91亚洲精品福利在线播放 | 久久毛片免费看一区二区三区 | 色综合99 | 免费观看欧美一级毛片 | 精品欧美| 亚洲欧美精品国产一区色综合 | 亚洲三级免费 | 国产黄的网站免费 | 久操免费在线观看 | 老湿机一区午夜精品免费福利 | 国产精品一区二区综合 | 精品欧美激情在线看 | 国产黄色视屏 | 国产三级欧美 | 国产精品尤物在线 | 黄色影片在线看 | 黄色视频毛片 | 直接黄91麻豆网站 | 国产视频三区 | 玖玖精品在线观看 | 99久热在线精品视频播 | 日本a级毛片 | 国产精品青草久久久久福利99 | 黄色www.| 日韩精品久久久久影院 | 国产美女久久久久 |