在springMVC中咱們通常使用註解的形式來完成web項目,可是若是不明白springmvc的對於不一樣註解的應用場景就會很容易犯錯誤css
一、什麼是restful形式:前端
restful形式的在springmvc中使用須要修改前端控制器:非restful形式的是.do或者.action。而restful形式的是/.java
二者能夠都在web.xml中配置兩種前端控制器。可是注意:改成restful形式的須要設置靜態資源映射,由於js、css等文件springmvc訪問不到了,須要在springMVC.xml中設置web
靜態資源映射:spring
<!-- 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加載springmvc配置 --> <init-param> <param-name>contextConfigLocation</param-name> <!-- 配置文件的地址 若是不配置contextConfigLocation, 默認查找的配置文件名稱classpath下的:servlet名稱+"-serlvet.xml"即:springmvc-serlvet.xml --> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 能夠配置/ ,此工程 全部請求所有由springmvc解析,此種方式能夠實現 RESTful方式, 須要特殊處理對靜態文件的解析不能由springmvc解析 能夠配置*.do或*.action,全部請求的url擴展名爲.do或.action由springmvc解析, (這裏的url配置即網頁訪問的連接路徑,若是使用restful形式,則配爲/,此時須要在springmvc中配置資源映射:<mvc:resource....> 若是不是/,則用*.do或*.action,此時不須要配置資源映射,springmvc就能夠解析這些靜態文件) 此種方法經常使用 不能夠/*,若是配置/*,返回jsp也由springmvc解析,這是不對的。 --> <url-pattern>*.action</url-pattern> </servlet-mapping> <!-- restful的配置 --> <servlet> <servlet-name>springmvc_rest</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加載springmvc配置 --> <init-param> <param-name>contextConfigLocation</param-name> <!-- 配置文件的地址 若是不配置contextConfigLocation, 默認查找的配置文件名稱classpath下的:servlet名稱+"-serlvet.xml"即:springmvc-serlvet.xml --> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc_rest</servlet-name> <!-- rest方式配置爲/ --> <url-pattern>/</url-pattern> </servlet-mapping>
restfu形式是否獲取json格式的數據,在http頭文件中的accept與Content-Type中就肯定了使用哪一種數據。json
RESTful軟件開發理念,RESTful對http進行很是好的詮釋。服務器
RESTful即Representational State Transfer的縮寫。restful
綜合上面的解釋,咱們總結一下什麼是RESTful架構:架構
(1)每個URI表明一種資源;mvc
(2)客戶端和服務器之間,傳遞這種資源的某種表現層;
(3)客戶端經過四個HTTP動詞,對服務器端資源進行操做,實現"表現層狀態轉化"。
區別:下面是jsp頁面書寫的區別:
非RESTful的http的url:http://localhost:8080/items/editItems.action?id=${id}。頁面的url是此種類型的,咱們能夠判斷是非restful形式的,
RESTful的url是簡潔的:http:// localhost:8080/items/editItems/${id}.經過此咱們能夠判斷是restful形式的訪問。
參數經過url傳遞,rest接口返回json數據
對於這個id的參數綁定的區別:
非restful的參數綁定就是以前介紹過的在controller的方法的參數中直接綁定便可。
http://localhost:8080/items/editItems.action?id=${id}
restful形式的參數綁定和@RequestMapping的寫法:
http:// localhost:8080/items/editItems/${id}
因此到底使用哪一個註解,取決因而否是restful的形式訪問。
四、@RequestParam與@PathVariable註釋的區別
因此@PathVariable這裏主要用於restful形式的訪問。
@RequestParam主要用於非restful的參數綁定,可是若是頁面的參數跟方法中的參數名稱保持一致就不須要寫此註解。若是不一致須要使用。
利用若是有默認值的話,就必需要用此註解,用defaultValue屬性。