本文研究的主要是SpringMVC對RESTfull的支持的相關(guān)內(nèi)容,具體如下。
RESTful架構(gòu),就是目前流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便,所以正得到越來越多網(wǎng)站的采用。RESTful架構(gòu)對url進(jìn)行規(guī)范,寫RESTful格式的url是什么樣子的呢?我們一般請求的url是類似這樣子的:
http://...../xxx.action?id=001&type=aaa
而REST的url風(fēng)格是什么樣子呢?一般它類似于:
http://..../xxx/001
所以REST有個(gè)很明顯的特點(diǎn):使url變得簡潔,將參數(shù)通過url傳到服務(wù)端。springmvc也是支持這種REST風(fēng)格的url的,我們定義一個(gè)controller來測試一下:
1
2
3
4
5
6
|
//查詢商品信息,輸出json,使用RESTful @RequestMapping ( "/itemsView/{id}" ) public @ResponseBody ItemsCustom itemsView( @PathVariable ( "id" ) Integer id) throws Exception { ItemsCustom itemsCustom = itemsService.findItemsById(id); return itemsCustom; } |
@ResponseBody
是用來將itemsCustom
轉(zhuǎn)成json的注解,而@PathVariable
注解則是跟REST有關(guān)了,@RequestMapping(value=”/ itemsView/{id}”)
中的{id}表示一個(gè)占位符,那么這里面?zhèn)鬟^來的值會傳到被@PathVariable
標(biāo)記的形參上,如果形參和占位符中的變量一樣的話,可以不用再注解中指定,否則注解中要指定這個(gè)占位符中的變量(即id)。這樣的話,參數(shù)就可以通過url傳到形參中來了。
但是這樣還不行,還要在前端控制器中針對REST進(jìn)行配置,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- 配置springmvc的前端控制器DispatcherServlet,REST配置 --> < servlet > < servlet-name >springmvc_rest</ servlet-name > < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class > < init-param > < param-name >contextConfigLocation</ param-name > < param-value >classpath:spring/springmvc.xml</ param-value > </ init-param > </ servlet > < servlet-mapping > < servlet-name >springmvc_rest</ servlet-name > < url-pattern >/</ url-pattern > </ servlet-mapping > |
攔截的是所有的url(/),這個(gè)配置跟之前配置好的前端控制器是沒有沖突的,可以并存。經(jīng)過這樣配置后,就可以在瀏覽器中輸入http://localhost:8080/SpringMVC_Study/itemsView/1來測試返回到瀏覽器的數(shù)據(jù)了,可以看到返回一串json數(shù)據(jù)。
但是有個(gè)問題,使用上面的配置后會攔截所有的url,那么對靜態(tài)資源也會攔截,所以DispatcherServlet也會解析靜態(tài)資源,但是這樣的話就會出錯(cuò),所以我們要設(shè)置一下不讓它解析靜態(tài)資源。如:
1
2
3
|
<!-- 靜態(tài)資源解析,包括js,css,img... --> < mvc:resources location = "/js/" mapping = "/js/**" ></ mvc:resources > < mvc:resources location = "/img/" mapping = "/img/**" ></ mvc:resources > |
如果還有其他靜態(tài)資源的話,也要設(shè)置一下,這樣就不會去解析靜態(tài)資源了,訪問靜態(tài)資源的時(shí)候就直接訪問即可。
總結(jié)
以上就是本文關(guān)于淺談SpringMVC對RESTfull的支持的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://blog.csdn.net/eson_15/article/details/51743514