在springMVC中我們一般使用注解的形式來完成web項目,但是如果不明白springmvc的對於不同注解的應用場景就會很容易犯錯誤
1、什么是restful形式:
什么是RESTful
restful形式的在springmvc中使用需要修改前端控制器:非restful形式的是.do或者.action。而restful形式的是/.
兩者可以都在web.xml中配置兩種前端控制器。但是注意:改為restful形式的需要設置靜態資源映射,因為js、css等文件springmvc訪問不到了,需要在springMVC.xml中設置
靜態資源映射:
<!-- 前端控制器 --> <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中就確定了使用哪種數據。
RESTful軟件開發理念,RESTful對http進行非常好的詮釋。
RESTful即Representational State Transfer的縮寫。
綜合上面的解釋,我們總結一下什么是RESTful架構:
(1)每一個URI代表一種資源;
(2)客戶端和服務器之間,傳遞這種資源的某種表現層;
(3)客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現"表現層狀態轉化"。
如何判斷是restful還是非restfu形式的訪問:
區別:下面是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的形式訪問。
4、@RequestParam與@PathVariable注釋的區別
所以@PathVariable這里主要用於restful形式的訪問。
@RequestParam主要用於非restful的參數綁定,但是如果頁面的參數跟方法中的參數名稱保持一致就不需要寫此注解。如果不一致需要使用。
利用如果有默認值的話,就必須要用此注解,用defaultValue屬性。