天天看點

可單例開發、典型的教科書式的mvc構架----springmvc----day02(五)

8.json資料互動
             8.1為什麼要進行json資料互動
                 json資料格式在接口調用中、html頁面中較常用,json格式比較簡單,解析還比較友善。
                 比如:webservice接口,傳輸json資料。            8.2springmvc進行json互動
                 1.請求json,輸出json,要求請求的是json串,是以在前端頁面中需要将請求的内容轉成json,不太友善。                2.請求key/value,輸出json。此方法比較常用。
            8.3環境準備
                 8.3.1加載json串的jar包
                     springmvc中使用jackson的包進行json轉換(@requestBody和@responseBody使用下邊的包進行json串)。                8.3.2配置json轉換器
                     在注解擴充卡中加入messageConverters
                         <!-- mvc:annotation-driven代替上邊注解映射器和注解擴充卡的配置 mvc:annotation-driven預設加載很多的參數綁定方法,比如json轉換解析器就預設加載了, 
                         如果使用mvc:annotation-driven不用配置上邊的RequestMappingHandlerMapping和RequsetMappingHandleAdaper 
                         實際開發中使用:mvc:annotation-driven -->            8.4json互動測試
                 8.4.1輸入json串,輸出是json串
                     8.4.1.1jsp頁面
                         使用jquery的ajax送出json串,對輸出的json結果進行解析。                        function requestJson() {
                             //請求json,輸出的是json
                             $.ajax({
                                 type : 'post',
                                 url : '${pageContext.request.contextPath }/requestJson.action',
                                 contentType : "application/json;charset=UTF-8",
                                 //資料格式是json 串
                                 data : '{"name":"手機", "price":9090}',
                                 success : function(data) {
                                     alert(data);
                                 }
                             });
                         }
                     8.4.1.2controller
                         @RequestMapping("/requestJson")
                         public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom) {
                             itemsCustom.setName(itemsCustom.getName() + "王際");                            return itemsCustom;
                         }                8.4.2輸入key/value,輸出是json串
                     8.4.2.1jsp頁面
                         function responseJson() {
                             //請求key/value,輸出的是json
                             $.ajax({
                                 type : 'post',
                                 url : '${pageContext.request.contextPath }/responseJson.action',
                                 //    contentType : "application/json;charset=UTF-8",
                                 //資料格式是key/value 
                                 data : 'name=手機&price=999',
                                 success : function(data) {
                                     alert(data);
                                 }
                             });
                         }                    8.4.2.2controller
                         @RequestMapping("/responseJson")
                         public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom) {
                             return itemsCustom;
                         }         9.RESTful支援
             9.1什麼是RESTful
                 RESTful架構,就是目前最流行的一種網際網路軟體架構。它結構清晰、符号标準、易于了解、擴充友善、是以正得到越來越多網站的采用。                RESTful(即Representational State Transfer的縮寫)其實是一個開放理念,是對http的很好的诠釋。
                1.對url進行規範,寫RESTful格式的url
                     非REST的url:http://...../queryItems.action?id=001&type=T01
                     REST的url:http://..../items/001
                         特點:url簡潔,将參數通過url傳到服務端                2.http的方法規範
                     不管是删除、添加、更新。。使用url是一緻的,如果進行删除,需要設定http的方法為delete,同理添加。。。                    背景controller方法:判斷http方法,如果是delete執行删除,如果是post執行添加。
                3.對http的contentType規範
                 請求時指定contentType,要json資料,設定成json格式的type。。            9.2REST的例子
                 9.2.1需求:
                     查詢商品資訊,傳回json資料。                9.2.2controller
                     定義方法,進行url映射使用REST風格的url,将查詢商品資訊的id傳入controller                    輸出json使用@ResponseBody将java對象輸出json。
                         @RequestMapping("/requestJson")
                         public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom) {
                             itemsCustom.setName(itemsCustom.getName() + "王際");                            return itemsCustom;
                         }
                     @RequestMapping(value="/itemsView/{id}"):{XXX}占位符,請求的url可以是“/viewItems/1”或“viewItems/2”,通過在方法中使用@PathVariable擷取{XXX}中的XXX變量。
                     @PathVariable用于将請求url中的模闆變量映射到功能處理方法的參數上。
                     如果RequestMapping中表示為“/itemsView/{id}”,id和形參名稱一緻,@PathVariable不用指定名稱。                9.2.3REST方法的前端控制器配置
                     在web.xml配置:
                         <!-- springmvc-rest前端控制器 -->
                         <servlet>
                             <servlet-name>springmvc-rest</servlet-name>
                             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>                            <!-- contextConfigLocation配置springmvc加載的配置檔案(配置處理器、映射器、擴充卡等等) 如果不配置contextConfigLocation,預設加載的是/WEB-INF/servlet名稱-servlet.xml(springmvc-servlet.xml) -->
                             <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>
                             <!-- 第一種:*.action,通路以.action結尾由DispatcherServlet進行解析 第二種:/,所有通路的位址都由DispatcherServlet進行解析,對于靜态檔案的解析需要配置不讓DispatcherServlet解析 
                                 使用此種方法可以實作RESTful風格的url 第三種:/*,這樣配置不對,使用這種配置,最終需要發到一個jsp頁面時, 仍然會有DispatcherServlet解析jsp位址值,不能提供jsp頁面找到handler,會報錯 -->
                             <url-pattern>/</url-pattern>
                         </servlet-mapping>                9.3對靜态資源的解析
                     配置前端控制器的url-parttern中指定/,對靜态資源的解析出現問題:
                     在springmvc.xml中添加靜态資源解析方法。
                         <!-- 靜态資源 -->
                         <mvc:resources location="/assets/css/" mapping="/css/**" />
                         <mvc:resources location="/assets/font/"
                             mapping="/font/**" />
                         <mvc:resources location="/assets/images/"
                             mapping="/images/**" />
                         <mvc:resources location="/assets/js/" mapping="/js/**" />
                         <mvc:resources location="/assets/musics/"
                             mapping="/musics/**" />
                         <mvc:resources location="/assets/scripts/"
                             mapping="/scripts/**" />
                         <mvc:resources location="/assets/upload/"
                             mapping="/upload/**" />