SpringMVC(五)RESTful支援,Dispatcher常見的攔截路徑

z1340954953發表於2018-06-13

RESTful架構

REST,即Representational State Transfer的縮寫,表現層狀態轉化

*資源

網路上的一個實體,文字,圖片,MP3檔案,可以使用URI進行定位,每個資源獨有一個URI,上網就是

URI定位資源的過程

* 表現層

資源的表現形式,比如文字檔案使用txt格式表示等等。

嚴格來說URI應該代表資源的實體,不代表他的形式,網址用.html結尾作為字尾,是不必要的,這是表現層的範疇

具體表現形式應在http的請求頭資訊中accept和content-type指定。

* 狀態轉換

http協議是無狀態協議,如果客戶端需要操作伺服器,必須通過某種手段,讓服務端發生"狀態轉化"。這個轉換是建立在

表現層之上的,就是"表現層狀態轉化"

客戶端用到的手段是http協議,http協議裡面表示操作方式的詞語:

GET:獲取資源

POST:新建資源

PUT:更新資源

DELETE:刪除資源

總結,RESTful架構

* 每個URI代表一種資源

* 客戶端和服務端傳遞的是資源的表現層

* 客戶端通過4個http動詞操作伺服器資源

舉個例說明:

傳統方式操作資源
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

GET,POST 請求引數,經常遇到,但是PUT、DELETE傳送請求,需要注意。

tomcat預設解析post請求,PUT、DELETE請求方式預設不支援,修改tomcat的server.xml加上

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000"
           redirectPort="8443"
           parseBodyMethods="POST,PUT,DELETE"
           URIEncoding="UTF-8" />

SpringMVC RESTful開發

使用RESTful開發商品查詢

<script type="text/javascript">
	 $("#btn").live('click',function(){
		 $.ajax({
			 type:'post',
				url:contentpath+'/item/'+$("#btnValue").val()+'.action',
				contentType:"application/x-www-form-urlencoded;charset=utf-8",
				dataType:'json',
				success:function(data){
					console.log(data);
				},
				error:function(){
					alert('伺服器連線失敗,請重試!');
				}
			 
		 });
	 });
	</script>
	<input id="btnValue" type="text"> <input id="btn" type="button" value="RESTful提交">

controller方法

@RequestMapping("/{id}.action")
	public @ResponseBody Item queryItemInfoById(@PathVariable Integer id){
		Item item = new Item();
		item.setId(1001);
		item.setName("華為");
		item.setTime(new Date());
		item.setRemark("....");
		return item;
	}

SpringMVC攔截路徑說明

SpringMVC的前端控制器對符合匹配規則的URI進行攔截,常見的如下

 <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 	<init-param>
 		<param-name>contextConfigLocation</param-name>
 		<param-value>classpath:springMVC.xml</param-value>
 	</init-param>
  </servlet>
  <servlet-mapping>
  <!-- /* 攔截所有,jsp,png,js,css...
       *.action 攔截匹配的URI
       /  不會攔截jsp頁面,但是會攔截靜態資源    ****推薦**** 
             需要在SpringMVC.xml加上放行的路徑
   -->
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>

配置為/,對於靜態資源的處理方法:

1. 在SpringMVC.xml中加上靜態資源放行

<!-- 配置靜態資源處理 必須檔案位於webapp根目錄下-->
	<mvc:resources location="/js/**" mapping="/js/"/>
	<mvc:resources location="/images/**" mapping="/images/"/>
	<mvc:resources location="/css/**" mapping="/css/"/>

2. 啟用tomcat的defaultservlet處理,需要將配置放在dispatcherServlet前面

<servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.jpg</url-pattern>  
</servlet-mapping>  
<servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.js</url-pattern>  
</servlet-mapping>  
<servlet-mapping>  
    <servlet-name>default</servlet-name>  
    <url-pattern>*.css</url-pattern>  
</servlet-mapping>  

轉載:http://www.ruanyifeng.com/blog/2011/09/restful.html

          https://blog.csdn.net/u012730299/article/details/51872704


相關文章