javascript
将JSON功能添加到您的GWT应用程序中
JSON簡介
在Web應(yīng)用程序上工作時(shí),總是會出現(xiàn)客戶端-服務(wù)器數(shù)據(jù)交換的問題。 在此問題上有多種方法,其中許多使用XML進(jìn)行交換。 執(zhí)行此任務(wù)的一種不太知名的格式是JSON。 JSON(JavaScript對象表示法)是一種輕量級的數(shù)據(jù)交換格式。 這對人類來說很容易讀寫,對機(jī)器來說也很容易解析和生成。 盡管JSON在傳輸?shù)臄?shù)據(jù)上可能有所不同,但與XML相比,JSON被認(rèn)為不那么冗長,過時(shí)。 在線上有多種資源可幫助您開始使用JSON 。
JSON庫
JSON是一種完全獨(dú)立于語言的文本格式,并且提供了可用于大量編程語言的庫。 對于Java中的JSON ,實(shí)現(xiàn)的源代碼可用。 請注意,該站點(diǎn)未在存檔文件中提供二進(jìn)制文件,但是我們已經(jīng)編譯了這些類并將它們捆綁在一個(gè)JAR文件中,您可以在此處直接下載。
GWT和JSON集成
在本教程中,我將向您展示如何在GWT中操作JSON,以便您可以與啟用JSON的Web應(yīng)用程序進(jìn)行通信。 請注意,在GWT應(yīng)用程序中,實(shí)現(xiàn)客戶端與服務(wù)器通信的最常見方法是通過RPC調(diào)用 。 因此,使用JSON通常適用于通過普通的舊HTTP調(diào)用訪問外部服務(wù)器的情況。
創(chuàng)建應(yīng)用程序
讓我們開始創(chuàng)建一個(gè)新的Eclipse項(xiàng)目(“ File?New?Web Application Project”)并將其命名為“ JsonGwtProject”。 選擇僅支持Google的Web工具包,而不支持App Engine。 服務(wù)器的角色將由GWT SDK提供的嵌入式Jetty容器扮演。
創(chuàng)建項(xiàng)目框架后,編輯模塊聲明文件(在本例中為“ JsonGwtProject.gwt.xml”)。 在讀取“其他模塊繼承”的行之后添加以下行,以使您的GWT應(yīng)用程序啟用JSON。
<inherits name="com.google.gwt.json.JSON" /> 領(lǐng)域模型對象
現(xiàn)在,讓我們創(chuàng)建將用于保存數(shù)據(jù)的模型對象。 我們的模型是具有各個(gè)領(lǐng)域的“產(chǎn)品”類:
- 名稱
- 公司
- 序列號
- 價(jià)格
為了說明如何使用嵌套的JSON表達(dá)式,將使用多種價(jià)格。
相應(yīng)的Java類(普通的Java舊對象)如下:
package com.javacodegeeks.json.gwt.server.model;import java.util.LinkedList; import java.util.List;public class Product {private String name;private String company;private String serialNumber;private List<Double> prices = new LinkedList<Double>();public Product(String name, String company, String serialNumber, List<Double> prices) {super();this.name = name;this.company = company;this.serialNumber = serialNumber;this.prices = prices;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}public String getSerialNumber() {return serialNumber;}public void setSerialNumber(String serialNumber) {this.serialNumber = serialNumber;}public List<Double> getPrices() {return prices;}public void setPrices(List<Double> prices) {this.prices = prices;}} 應(yīng)用程序的服務(wù)器端
現(xiàn)在,讓我們創(chuàng)建應(yīng)用程序的服務(wù)器端代碼。 我們將創(chuàng)建一個(gè)servlet,該servlet將用于模擬從中檢索數(shù)據(jù)的外部服務(wù)器。 Servlet使用產(chǎn)品的靜態(tài)列表創(chuàng)建對客戶端的JSON響應(yīng)(在實(shí)際應(yīng)用程序中,將從DAO或更好地從其他服務(wù)中獲取產(chǎn)品)。 確保將下載的json.jar包含在項(xiàng)目的類路徑中,并且還將其復(fù)制到“ war \ WEB-INF \ lib”文件夾中。 servlet代碼如下:
Java JSON響應(yīng)生成
讓我解釋一下如何生成JSON響應(yīng)。 確保您是從org.json包而不是com.google.gwt.json導(dǎo)入JSON類。 第一步是創(chuàng)建一個(gè)JSONObject,它將保存響應(yīng)。 由于我們很可能擁有許多產(chǎn)品,因此我們還創(chuàng)建了一個(gè)JSONObjects列表。 我們遍歷現(xiàn)有產(chǎn)品,并為每個(gè)產(chǎn)品創(chuàng)建一個(gè)單獨(dú)的對象。 在該對象中,我們添加鍵值對,就像使用Map一樣。 對于價(jià)格,我們還創(chuàng)建了一個(gè)JSONObjects列表,然后將整個(gè)列表添加到產(chǎn)品的JSONObject中。 最后,我們將產(chǎn)品對象列表添加到響應(yīng)的JSONObject中。 JSONObject的toString()方法用于創(chuàng)建字符串表示形式。 對于該示例,結(jié)果為:
{“產(chǎn)品”:
[
{“公司”:“公司1”,“名稱”:“產(chǎn)品1”,“價(jià)格”:[{“價(jià)格”:123.2},{“價(jià)格”:123.6}],“序列號”:“ 12345”} {“公司”:“公司2”,“名稱”:“產(chǎn)品2”,“價(jià)格”:[{“價(jià)格”:234.2},{“價(jià)格”:234.6}],“序列號”:“ 67890”} ]}
web.xml中的Servlet配置
現(xiàn)在讓我們配置應(yīng)用程序,以便Servlet響應(yīng)特定的URL。 編輯web.xml文件(位于“ war / WEB-INF”中)并粘貼以下內(nèi)容(所有帶有g(shù)reetingService聲明的原始內(nèi)容都將被刪除):
GWT的客戶端
最后,讓我們創(chuàng)建GWT應(yīng)用程序的入口點(diǎn)“ JsonGwtProject”(原始內(nèi)容已完全刪除)。 客戶端將調(diào)用對服務(wù)器的HTTP GET調(diào)用,將接收J(rèn)SON格式的響應(yīng),然后解析響應(yīng)。 代碼是:
對于HTTP調(diào)用,使用RequestBuilder類。 定義了HTTP方法(GET)以及端點(diǎn)URL(已將servlet配置為響應(yīng))。 然后,使用RequestCallback類提供異步回調(diào)方法。 最后,請求被發(fā)送。 當(dāng)響應(yīng)從服務(wù)器到達(dá)時(shí)(如果未發(fā)生錯(cuò)誤),將調(diào)用我們的parseJsonData方法。 使用GWT解析JSON數(shù)據(jù)現(xiàn)在,讓我們看看如何使用GWT內(nèi)置方法解析接收到的數(shù)據(jù)。 確保您是從com.google.gwt.json包而不是org.json導(dǎo)入JSON類。 首先,我們使用JSONParser從字符串響應(yīng)中創(chuàng)建一個(gè)JSONValue對象。 然后,我們使用isObject()方法檢索一個(gè)JSONObject實(shí)例。 因?yàn)槲覀冎理憫?yīng)實(shí)際上是產(chǎn)品列表,所以我們通過調(diào)用JSONValue的isArray()方法來創(chuàng)建JSONArray類。 然后使用一個(gè)循環(huán),并使用發(fā)生的JSONString對象的stringValue()方法提取模型的字段。 請注意,為了提取多個(gè)價(jià)格值,我們使用相同的過程遍歷JSONArray對象。 準(zhǔn)備HTML文件還必須更改“ JsonGwtProject.html”,以便為界面的按鈕提供占位符。 編輯它,并在“ noscript”聲明之后添加以下幾行:
...<h1>Web Application Starter Project</h1><table align="center"><tr><td id="fetchDataButtonContainer"></td></tr><tr><td colspan="2" style="color:red;" id="errorLabelContainer"></td></tr></table> ...運(yùn)行示例如果我們運(yùn)行項(xiàng)目,則會出現(xiàn)該界面,實(shí)際上只有一個(gè)按鈕。 點(diǎn)擊按鈕。 檢索JSON數(shù)據(jù),執(zhí)行解析并將結(jié)果打印在屏幕上: 僅此而已。 與往常一樣,您可以從此處下載Eclipse項(xiàng)目。
請享用!
相關(guān)文章 :- GWT EJB3 Maven JBoss 5.1集成教程
- 使用Spring Security保護(hù)GWT應(yīng)用程序
- GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示
- 建立自己的GWT Spring Maven原型
- 將CAPTCHA添加到您的GWT應(yīng)用程序
翻譯自: https://www.javacodegeeks.com/2010/07/add-json-gwt-application.html
總結(jié)
以上是生活随笔為你收集整理的将JSON功能添加到您的GWT应用程序中的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Netbeans开发App Engi
- 下一篇: 求教如何劫持无线路由器如何实现路由器劫持