《Java EE程序設計教程》課件Chapter4 Ajax+jQuery_第1頁
《Java EE程序設計教程》課件Chapter4 Ajax+jQuery_第2頁
《Java EE程序設計教程》課件Chapter4 Ajax+jQuery_第3頁
《Java EE程序設計教程》課件Chapter4 Ajax+jQuery_第4頁
《Java EE程序設計教程》課件Chapter4 Ajax+jQuery_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第四章Ajax/JSON學習目標首要目標學習并掌握Ajax技術及原理;理解掌握jQuery的使用方法;掌握JSON語法、使用;熟練應用Ajax和JSON進行項目開發(fā);次要目標理解jQuery框架下的Ajax理解對象模型API本章提綱4.1Ajax技術簡介4.2jQuery技術簡介4.3JSON簡介4.4JavaEE平臺中的JSON處理4.5使用對象模型API4.6JavaEERESTfulWeb服務中的JSON4.7Ajax和JSON開發(fā)實例4.1Ajax技術簡介Ajax是指一種創(chuàng)建交互式網(wǎng)頁應用的開發(fā)技術,通過在后臺與服務器進行少量的數(shù)據(jù)交換,實現(xiàn)網(wǎng)頁的異步更新。與傳統(tǒng)Web開發(fā)相比(圖4-1),Ajax是一種獨立于Web服務器的瀏覽器技術。它在瀏覽器與服務器之間使用異步傳輸(HTTP請求)模式Ajax關鍵技術XHTML和CSS:通過標準化的方式顯示數(shù)據(jù)。XML和XSLT:進行數(shù)據(jù)的交互和操作。DOM(DocumentObjectModel):實現(xiàn)動態(tài)的顯示和交互。XMLHttpRequest:用于數(shù)據(jù)的異步更新。JavaScript:響應用戶動作和處理數(shù)據(jù),并將以上關鍵技術綁定在一起。Ajax工作過程JavaScript腳本使用XMLHttpRequest對象向服務器發(fā)送請求。發(fā)送請求時,既可以發(fā)送GET請求,也可以發(fā)送POST請求。JavaScript腳本使用XMLHttpRequest對象解析服務器響應數(shù)據(jù)。JavaScript腳本通過DOM動態(tài)刷新HTML頁面,也可以為服務器響應數(shù)據(jù)增加CSS樣式表,在當前網(wǎng)頁的某個部分加以顯示。4.1.1XMLHttpRequest對象Ajax技術的核心就是異步請求發(fā)送,而XMLHttpRequest則是異步發(fā)送請求的對象。同步與異步圖4-2同步交互時序圖圖4-3異步交互時序圖XMLHttpRequest對象屬性與方法XMLHttpRequest對象提供了一系列的屬性和方法,來向服務器發(fā)送異步的HTTP請求。在服務器處理用戶請求的過程中,XMLHttpRequest通過屬性的狀態(tài)值來實時反映HTTP請求所處的狀態(tài),并根據(jù)當前狀態(tài)指示JavaScript做出相應處理表4-1XMLHttpRequest對象方法方法描述abort取消當前請求。調用此方法,當前狀態(tài)返回UNINITIALIZED狀態(tài)getAllResponseHeaders將HTTP請求的所有響應頭部作為鍵/值對返回getResponseHeaders從響應信息中獲取指定的HTTP頭的字符串形式open創(chuàng)建一個新的HTTP請求,并指定此請求的方法、URL、是否異步以及驗證信息(用戶名/密碼)send發(fā)送請求到HTTP服務器setRequestHeader把指定頭部設置為所提供的指,在調用該方法之前必須先調用open方法XMLHttpRequest對象屬性與方法屬性描述onreadystatechange狀態(tài)改變的事件觸發(fā)器,當readyState屬性改變時會觸發(fā)此事件。只寫readyState當前請求處理返回的狀態(tài),只讀responseBody將響應信息以unsignedbyte數(shù)組形式返回,只讀responseStream將響應信息以AdoStream對象形式返回,只讀responseText將響應信息以字符串形式返回,只讀responseXML將響應信息格式化為XMLDocument對象返回,只讀status返回當前請求的HTTP狀態(tài)碼,200:OK,404:未找到statusTextHTTP狀態(tài)碼的相應文本,只讀表4-2XMLHttpRequest對象屬性XMLHttpRequest對象屬性與方法狀態(tài)含義說明0未初始化對象已創(chuàng)建,但未初始化,即尚未調用open()方法1初始化對象已創(chuàng)建,已調用open()方法,但尚未調用send()方法2發(fā)送數(shù)據(jù)send()方法已調用,準備發(fā)送數(shù)據(jù)3數(shù)據(jù)傳送中已接受部分數(shù)據(jù),但沒有完全接收4傳送完成數(shù)據(jù)接收完畢,此時可以通過response系列方法獲取完整回應數(shù)據(jù)表4-3readyState屬性的狀態(tài)值實例:第一個Ajax程序認識了Ajax以及它的核心對象XMLHttpRequest之后,接下來看一個非常簡單的例子,感受一下Ajax是如何與服務器之間進行異步通信的。在webapps目錄下新建文件夾FirstAjax,并在其下創(chuàng)建文件index.html和helloworld.html文件。這個例子的功能是實現(xiàn)單擊網(wǎng)頁上的一個按鈕,顯示一句“Hello,world!”。實例:第一個Ajax程序index.html<scriptlanguage="javascript">varxmlHttp;functioncreateXMLHttp(){if(window.XMLHttpRequest){xmlHttp=newXMLHttpRequest();}else{xmlHttp=newActiveXObject("Microsoft.XMLHTTP");}}functionshowMsg(){createXMLHttp();xmlHttp.open("POST","helloworld.html");xmlHttp.onreadystatechange=showMsgCallback;xmlHttp.send(null);}functionshowMsgCallback(){if(xmlHttp.readyState==4){if(xmlHttp.status==200){vartext=xmlHttp.responseText;document.getElementById("msg").innerHTML=text;}}}</script></head><body><inputtype="button"value="調用Ajax的內容"onclick="showMsg()"/><spanid="msg"></span></body>實例:第一個Ajax程序<html><head><title></title></head><body>hello,world!</body></html>helloworld.html文件index.html中包括createXMLHttp、showMsg、showMsgCallback三個JavaScript函數(shù)。其中createXMLHttp函數(shù)完成XMLHttpRequest對象的初始化,showMsg函數(shù)向Web服務器發(fā)送XMLHttp請求,訪問helloworld.html文件里的數(shù)據(jù)。showMsgCallback函數(shù)將服務器返回的信息以字符串的形式賦給text,并在網(wǎng)頁上顯示。實例:第一個Ajax程序單擊按鈕觸發(fā)監(jiān)聽事件onclick,從而向服務器異步發(fā)送請求,獲取返回的信息并顯示。運行效果如圖所示。4.2jQuery技術簡介jQuery是一個兼容多瀏覽器的JavaScript庫,核心理念是“writeless,domore”。jQuery的語法設計可以使開發(fā)更加敏捷,能完成文檔對象的操作、選擇DOM對象、制作動畫效果、事件處理、使用Ajax以及其他功能。同時jQuery提供許多成熟的插件,能使用戶的HTML代碼與內容分離,即不用再在HTML里面插入一堆JavaScript,只需定義ID即可。模塊化的應用模式可以輕松的開發(fā)出功能強大的動態(tài)頁面。一個簡單的jQuery實例在該例子中,jQuery選擇器$("p")表示選取全部<p>元素,在綁定的click事件被觸發(fā)之后調用function()函數(shù),從而隱藏<p>與</p>之間的內容。當然,運行代碼之前需要先下載jQuery并通過<script>標簽把它添加到網(wǎng)頁中。<html><head><scripttype="text/javascript“src="jquery.js"></script><scripttype="text/javascript">$(document).ready(function(){$("p").click(function(){$(this).hide();});});</script></head><body><p>點我,我就會隱藏!</p></body></html>4.2.1jQuery框架下的Ajax編寫常規(guī)的Ajax代碼并不容易,因為不同的瀏覽器對Ajax的實現(xiàn)并不相同。這意味著需要編寫額外的代碼對瀏覽器進行測試。jQuery為Ajax提供了多個方法,使用jQuery將極大提高編寫JavaScript代碼的效率,同時也能解決瀏覽器兼容性問題。原始的Ajax需要手動的做很多事情。比如針對不同的瀏覽器創(chuàng)建XMLHttpRequest對象、判斷請求狀態(tài)、編寫回調函數(shù)使用jQuery不僅簡化了代碼的邏輯結構,使用jQuery的Load方法就能代替一大堆繁瑣的函數(shù)定義與調用。所以jQuery提供的Ajax方法可以在解決各種差異性問題的同時,大大提高代碼的編寫效率。<scripttype="text/javascript"src="js/jquery-1.3.2-vsdoc2.js"></script><scripttype="text/javascript">$(function(){$("#btnAjaxJquery").click(function(event){

$("#divResult").load("data/AjaxGetCityInfo.jsp",

{"resultType":"html"});});})</script></head><body><buttonid="btnAjaxJquery">使用jQuery的load方法</button><br/><divid="divResult"></div></body>4.2.1jQuery框架下的Ajax4.2.2利用jQuery的Ajax功能調用遠程方法jQuery提供了多個與Ajax相關的方法,通過調用這些方法能夠使用HTTPGET或HTTPPOST從遠程服務器上請求文本、HTML、XML或JSON數(shù)據(jù)。jQuery.load(url,[data],[callback])方法jQuery.get(url,[callback])方法jQuery.post(url,[data],[callback])方法jQuery.ajax(options)方法jQuery.load方法jQuery.load(url,[data],[callback])方法url:規(guī)定希望加載的urldata:與請求一同發(fā)送的查詢字符串鍵/值對集合callback:load方法完成后所執(zhí)行的函數(shù)名稱jQuery.load方法jQuery.load是最簡單的Ajax函數(shù),使用具有一定的局限性。它主要用于直接返回HTML的Ajax接口。下面的這句代碼會把jQuery-load.txt文件中id=p1的元素內容加載到指定的<div1>元素中。<h2>jQueryandAjax</h2><pid="p1">Thisissometextinaparagraph.</p>jQuery-load.txt$("#div1").load("jQuery-load.txt#p1");jQuery.get方法jQuery.get(url,[callback])方法url:希望請求的urlcallback:請求成功后所執(zhí)行的函數(shù)名稱jQuery.get方法jQuery.get方法通過HTTPGET方式從遠程服務器上請求數(shù)據(jù)。$.get()的第一個參數(shù)是請求的url("demo_test.jsp"),第二個參數(shù)是回調函數(shù)function。該函數(shù)的第一個回調參數(shù)data保存被請求頁面的內容,第二個回調參數(shù)status保存請求的狀態(tài)。$("button").click(function(){$.get("demo_test.jsp",function(data,status){alert("Data:"+data+"\nStatus:"+status);});});<%response.getWriter().write("ThisissometextfromanexternalJSPfile.")%>jQuery.post方法jQuery.post(url,[data],[callback])方法url:希望請求的urldata:與請求一同發(fā)送的數(shù)據(jù)callback:請求成功后所執(zhí)行的函數(shù)名稱jQuery.post方法jQuery.post方法通過HTTPPOST方式從遠程服務器上請求數(shù)據(jù)。使用$.post()連同請求一起發(fā)送數(shù)據(jù)$("button").click(function(){$.post("demo_test_post.jsp",{name:"DonaldDuck",city:"Duckburg"},function(data,status){alert("Data:"+data+"\nStatus:"+status);});});jQuery.post方法$.post()的第一個參數(shù)是請求的URL("demo_test_post.jsp")。然后連同請求(name和city)一起發(fā)送數(shù)據(jù)。"demo_test_post.jsp"中的JSP腳本讀取這些參數(shù),對它們進行處理,然后返回結果。第三個參數(shù)是回調函數(shù)。第一個回調參數(shù)data存有被請求頁面的內容,而第二個參數(shù)status存有請求的狀態(tài)。<%Stringfname=request.getParameter("name");Stringcity=request.getParameter("city");response.Write("Dear"&fname&".");response.Write("Hopeyoulivewellin"&city&".")%>jQuery.ajax方法jQuery.ajax(options)方法通過HTTP請求加載遠程數(shù)據(jù),并返回其創(chuàng)建的XMLHttpRequest對象。這是jQuery中Ajax的核心函數(shù),上面所有的發(fā)送Ajax請求的函數(shù)內部最后都會調用此函數(shù)。option參數(shù)支持很多數(shù)據(jù)類型,例如XML、HTML、Script、JSON、TXT等。使用這些參數(shù)完全可以控制Ajax的請求,在Ajax回調函數(shù)中的this對象也是options對象。jQuery.ajax方法$.ajax({type:"POST",url:"/user.do/save",data:{‘userName’:’Jack’,‘a(chǎn)ge’:22},contentType:"application/json;charset=utf-8",dataType:"json",success:function(data){if(data.msg=="true"){alert("修改成功!");window.location.reload();}else{view(data.msg);}},error:function(){alert("異常!");}});4.3JSON簡介JSON(JavaScriptObjectNotation)是一種輕量級的文本數(shù)據(jù)交換格式。JSON解析器和JSON庫支持多種不同的編程語言,包括C、C++、C#、Java、JavaScript、Perl和Python等。它與XML類似,使用JavaScript語法來描述數(shù)據(jù)對象,后來慢慢發(fā)展成獨立于任何語言和平臺的數(shù)據(jù)交換格式,比XML更小、更快、更易解析。正是由于這些特性,JavaScript能夠通過內建函數(shù),使用JSON數(shù)據(jù)來生成原生的JavaScript對象。4.3.1JSON語法JSON主要有如下兩種數(shù)據(jù)結構:key-value對組成的數(shù)據(jù)結構。

這種數(shù)據(jù)結構在不同的語言中有不同的實現(xiàn),例如在JavaScript中是一個對象,在Java中一個種Map結構,在C語言中則是一個struct。值的有序集合。

這種數(shù)據(jù)結構在不同語言中可能由list、vector、數(shù)據(jù)和序列等實現(xiàn)。4.3.1JSON語法下面例子中employees數(shù)組包括3個員工記錄,而每個員工記錄又是一個對象。{"employees":[

{"firstName":"Bill","lastName":"Gates"},

{"firstName":"George","lastName":"Bush"},

{"firstName":"Thomas","lastName":"Carter"}]}

4.3.1JSON語法數(shù)組:值的有序集合。一個數(shù)組以“[”開始,“]”結束,數(shù)組中各個值之間使用逗號“,”分隔。對象:一個無序的名/值對集合。一個對象以“{”開始,“}”結束,每個“名稱”后接一個“:”冒號,名/值對之間使用“,”逗號分隔。JSON值(Value):JSON數(shù)據(jù)值用雙引號括起來,可以是數(shù)字(整數(shù)/浮點數(shù))、字符串、邏輯值(true/false)、數(shù)組、對象、null。這些結構可以嵌套使用。4.3.1JSON語法使用JavaScript創(chuàng)建一個對象數(shù)組employees并賦值,進行一些簡單的操作。修改對象數(shù)組employees第一項中的lastName值,可以直接對其進行賦值。varemployees=[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"},{"firstName":"Thomas","lastName":"Carter"}];employees[0].lastName="Jobs";4.3.2JSON的使用JSON最常見的用法之一,是從Web服務器上讀取JSON數(shù)據(jù)(作為文件或作為HttpRequest),將JSON數(shù)據(jù)轉換為JavaScript對象,然后在網(wǎng)頁中使用該數(shù)據(jù)。首先創(chuàng)建包含JSON語法的JavaScript字符串:vartxt='{"employees":['+'{"firstName":"Bill","lastName":"Gates"},'+'{"firstName":"George","lastName":"Bush"},'+'{"firstName":"Thomas","lastName":"Carter"}]}';4.3.2JSON的使用由于JSON語法是JavaScript語法的子集,JavaScript使用函數(shù)eval()可用于將JSON文本轉換為JavaScript對象。eval()方法使用的是JavaScript編譯器,必須把文本包圍在括號中,這樣才能避免語法錯誤。轉換為JavaScript對象之后,就可以在網(wǎng)頁中使用。varobj=eval("("+txt+")");JSON.stringify(user)<p>FirstName:<spanid="fname"></span><br/>LastName:<spanid="lname"></span><br/></p><scripttype="text/javascript">document.getElementById("fname").innerHTML=obj.employees[1].firstNamedocument.getElementById("lname").innerHTML=obj.employees[1].lastName</script>4.3.3生成和解析JSON數(shù)據(jù)在json.js提供的系統(tǒng)類中,關于JSON數(shù)據(jù)的生成和解析主要包括以下幾個類:JSONObject:可以看作是一個json對象,這是系統(tǒng)中有關JSON定義的基本單元,其包含一對(Key/Value)數(shù)值。JSONObject對外部調用的響應體現(xiàn)為一個標準的字符串。例如:初始化一個JSONObject實例,引用內部的put()方法添加數(shù)值:{"JSON":"Hello,World"}newJSONObject().put("JSON","Hello,World!")4.3.3生成和解析JSON數(shù)據(jù)JSONStringer:json文本構建類,這個類可以幫助快速和便捷的創(chuàng)建JSONtext。其最大的優(yōu)點在于可以減少由于格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規(guī)則(syntaxrules)創(chuàng)建JSONtext。每個JSONStringer實體只能對應創(chuàng)建一個JSONtext。JSONArray:它代表一組有序的數(shù)值,將其轉換為String輸出(toString)所表現(xiàn)的形式。這個類的內部同樣具有查詢行為,get()和opt()兩種方法都可以通過index索引返回指定的數(shù)值,put()方法用來添加或者替換數(shù)值。JSONTokener:json解析類。JSONException:json異常類。生成JSON數(shù)據(jù)利用JSONObject構建一個簡單的JSON。得到的JSON數(shù)據(jù)為:{"id":"1","name":"李磊","age":"30"}publicStringcreateJson(){try{JSONObjectjsonObject=newJSONObject();jsonObject.put("id","1");jsonObject.put("name","李磊");jsonObject.put("age","30");returnjsonObject.toString();}catch(Exceptione){e.printStackTrace();}return"";}解析JSON數(shù)據(jù)數(shù)據(jù)為{"id":"1","name":"李磊","age":"30"}首先將json字符串轉換為jsonTokener對象,在這個過程中使用了JSONTokener解析類。接著調用jsonTokener的nextValue()方法將json數(shù)據(jù)轉換為jsonObject對象,通過getString(keyname)獲取需要的值publicPersonparserJson(){Stringjson="{\"id\":\"1\",\"name\":\"李磊\",\"age\":\"30\"}";Personperson=newPerson();try{ JSONTokenerjsonTokener=newJSONTokener(json);JSONObjectjsonObject=(JSONObject)jsonTokener.nextValue();person.setId(jsonObject.getString("id"));person.setName(jsonObject.getString("name"));person.setAge(jsonObject.getString("age"));}catch(Exceptione){e.printStackTrace();}returnperson;}4.4JavaEE平臺中的JSON處理JavaEE應用程序中提供了各種便捷的API用來處理JSON數(shù)據(jù),其中包括主流的對象模型(ObjectModel)API和流模型(StreamingModel)API。對象模型API在內存中產(chǎn)生一個隨機存取的樹狀結構來代表了JSON數(shù)據(jù)。流模型API提供了一種以流來解析和生成JSON的方法,它把解析和生成JSON的控制權交給了程序員。對象模型API對象模型API和文件對象模型(DOM)API在xml中很相似。這是一個高級的API,它為JSON對象和數(shù)組結構提供了不可變的對象模型。這些JSON結構通過使用JsonObject和JsonArray被表示為對象模型。類或接口描述Json包含產(chǎn)生JSONreaders,writers,builders,和對象的靜態(tài)方法JsonGenerator一次一個值的將JSON數(shù)據(jù)寫入一個流中JsonReader從流中讀取JSON數(shù)據(jù),并且在內存中創(chuàng)建一個對象模型JsonObjectBuilderJsonArrayBuilder在內存中通過向源碼中加入一個值,創(chuàng)建一個對象模型或者數(shù)組模型JsonWriter從內存中拿出一個對象模型寫入流中JsonValueJsonObjectJsonArrayJsonStringJsonNumber表示JSON數(shù)據(jù)中的數(shù)據(jù)類型表4-4對象模型API類或接口流模型API流模型API與XML的流API(StAX)類似,它是由接口JsonParser和JsonGenerator組成。JsonParser包含使用流模型解析JSON數(shù)據(jù)的方法,JsonGenerator包含輸出JSON數(shù)據(jù)到一個輸出源的方法。類或接口描述Json包含創(chuàng)建JSON解析器、生成器、和對象的靜態(tài)方法JsonParser表示一個基于事件的解析器,可以從流中讀取JSON數(shù)據(jù)JsonGenerator每次一個值將JSON數(shù)據(jù)寫入到流中表4-5流模型API類或接口4.5使用對象模型API4.5.1從JSON數(shù)據(jù)創(chuàng)建對象模型JSON格式的數(shù)據(jù)經(jīng)常會遇到,比如訪問Web服務器,取回的數(shù)據(jù)通常就是JSON格式的。然而JSON數(shù)據(jù)是一種純文本的格式,并不是一個對象,所以從Web服務器取回來的數(shù)據(jù)并不能直接使用,需要將它轉換成一個對象模型,然后在網(wǎng)頁上的相應元素里顯示。JsonReader包含從輸入讀取JSON數(shù)據(jù)轉換到對象模型的方法。JsonReader可以從輸入流中創(chuàng)建對象模型JsonReaderreader=Json.createReader(newFileInputStream(...));4.5.1從JSON數(shù)據(jù)創(chuàng)建對象模型代碼顯示了如何從獲得的InputStream創(chuàng)建新的解析器API。當然也可以使用JsonReaderFactory創(chuàng)建多個解析器。在這段代碼中,一個jsonReader通過StringReader初始化,讀取JSON的空對象。調用readObject方法返回JSONObject實例JsonReaderFactoryfactory=Json.createReaderFactory(null);JsonReaderparser1=factory.createReader(...);JsonReaderparser2=factory.createReader(...);//讀取一個空的JSON數(shù)據(jù)創(chuàng)建對象JsonReaderjsonReader=Json.createReader(newStringReader("{}"));JsonObjectjson=jsonReader.readObject();4.5.1從JSON數(shù)據(jù)創(chuàng)建對象模型讀取一個對象的名稱/值對創(chuàng)建對象模型jsonReader=Json.createReader(newStringReader("{"

+"\"apple\":\"red\","

+"\"banana\":\"yellow\""

+"}"));JsonObjectjson=jsonReader.readObject();json.getString("apple");json.getString("banana");4.5.1從JSON數(shù)據(jù)創(chuàng)建對象模型讀取一個有兩個對象的數(shù)組數(shù)據(jù)生成對象模型jsonReader=Json.createReader(newStringReader("["

+"{\"apple\":\"red\"},"

+"{\"banana\":\"yellow\"}"

+"]"));JsonArrayjsonArray=jsonReader.readArray();4.5.1從JSON數(shù)據(jù)創(chuàng)建對象模型讀取嵌套結構的JSON數(shù)據(jù)生成對象模型jsonReader=Json.createReader(newStringReader("{"+"\"title\":\"TheMatrix\","+"\"year\":1999,"+"\"cast\":["+"\"KeanuReeves\","+"\"LaurenceFishburne\","+"\"Carrie-AnneMoss\""+"]"+"}"));json=jsonReader.readObject();4.5.2從應用代碼創(chuàng)建對象模型JsonObjectBuilder可以用來創(chuàng)建對象的JSON數(shù)據(jù)JsonArrayBuilder可以用來創(chuàng)建類型是JsonArray的JSON陣列。也就是說,可以通過在內存中利用add()方法向應用代碼添加values,從而創(chuàng)建一個JsonObject對象模型或者JsonArray對象模型。通過JsonBuilderFactory創(chuàng)建多個對象JsonObjectjsonObject=Json.createObjectBuilder().build();JsonBuilderFactoryfactory=Json.createBuilderFactory(null);JsonArrayBuilderarrayBuilder=factory.createArrayBuilder();JsonObjectBuilderobjectBuilder=factory.createObjectBuilder();4.5.2從應用代碼創(chuàng)建對象模型加入一對鍵值生成對象模型的代碼生成的JSON結構:寫入對象數(shù)組生成對象模型JsonObjectjsonObject=Json.createObjectBuilder().add("apple","red").add("banana","yellow").build();{"apple":"red","banana":"yellow"}JsonArrayjsonArray=Json.createArrayBuilder().add(Json.createObjectBuilder().add("apple","red")).add(Json.createObjectBuilder().add("banana","yellow")).build();4.5.3導航對象模型對象模型API創(chuàng)建了一個樹形結構,代表了一個JSON數(shù)據(jù)存儲器,它可以很容易地實現(xiàn)導航和查詢功能。JsonObject為訪問名稱/值對的無序集合提供了一個地圖視圖模型(導航)。JsonObjectobject=newJsonBuilder().beginObject().add("firstName","John").add("lastName","Smith").add("age",25).beginObject("address").add("streetAddress","212ndStreet").add("city","NewYork").add("state","NY").add("postalCode","10021").endObject().beginArray("phoneNumber").beginObject().add("type","home").add("number","212555-1234").endObject().beginObject().add("type","home").add("number","646555-4567").endObject().endArray().endObject().build();4.5.3導航對象模型創(chuàng)建的導航對象模型object數(shù)據(jù)結構如下:同樣的,object對象也可以通過JsonWriter寫至一個輸出流{"firstName":"John","lastName":"Smith","age":25,"phoneNumber":[{"type":"home","number":"212555-1234"},{"type":"fax","number":"646555-4567"}]}4.5.4將對象模型寫至一個流使用API創(chuàng)建的對象模型可以是JsonObject、JsonArray、JsonString、JsonNumber、JsonValue,不管是哪一種類型的對象模型,都可以通過JsonWriter將創(chuàng)建的對象模型寫至一個流。下面以JsonArray為例,其他類型的對象模型操作方法類似。4.5.4將對象模型寫至一個流生成的JSON數(shù)據(jù)結構如下:JsonBuilderFactoryfactory=Json.createBuilderFactory(null);JsonArrayjsonArray=factory.createArrayBuilder().add(factory.createObjectBuilder().add("type","home").add("number","(800)111-1111")).add(factory.createObjectBuilder().add("type","cell").add("number","(800)222-2222")).build();[{"type":"home","number":"(800)111-1111"},{"type":"cell","number":"(800)222-2222"}]4.5.4將對象模型寫至一個流將創(chuàng)建好的JsonArray對象模型通過JsonWriter寫至一個流try(JsonWriterjsonWriter=Json.createWriter(System.out)){jsonWriter.writeArray(jsonArray);jsonWriter.close();}4.6JavaEERESTfulWeb服務中的JSONREST(RepresentationStateTransfer,表述性狀態(tài)轉移)是一種跨平臺的、跨語言的架構風格。在REST風格中,對象被抽象為一種資源,資源數(shù)據(jù)的某個瞬間狀態(tài)被定義為一種表述,這種描述性的狀態(tài)包括資源數(shù)據(jù)的內容、表述格式(XML、JSON、Atom)等信息。REST的資源是可尋址的,通過HTTP協(xié)議定義的方法(GET、PUT、DELETE、POST)實現(xiàn)。HTTP+URI+XML是REST的基本實現(xiàn)形式,但不是唯一的實現(xiàn)形式。具體而言,HTTP協(xié)議和URI用于統(tǒng)一接口和定位資源,文本、二進制流、XML和JSON等格式用來作為資源的表述。RESTfulWebServices(REST式的Web服務)是一種基于ROA(Resource-OrientedArchitecture,面向資源的架構)的應用,其主要特點是方法信息存在于HTTP的方法(GET、PUT)中,作用域存在于URI中。Jersey簡介RESTfulWeb服務對應的標準規(guī)范是JAX-RS,它是JCP(JavaCommunityProcess)為JavaRESTfulWeb服務定義的一套API,從JavaEE6開始引入。RESTfulWeb服務的開發(fā)工具使用的是Jersey,它是JAX-RS的參考實現(xiàn)。Jersey框架由核心模塊、容器模塊、連接器模塊、Media模塊等模塊組成。RESTfulWeb服務中的JSON處理使用MOXy處理JSONMOXy是EclipseLink項目的一個模塊,也是Jersey默認的JSON解析方式,可以在項目中添加MOXy的依賴包來使用MOXy。定義依賴<dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-moxy</artifactId></dependency>使用MOX

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論