GWT RPC機制

GWT RPC

GWT RPC
Remote Procedure Calls前端

 

GWT:java

Google Web Toolkit的縮寫,有了 GWT可使用 Java 編程語言編寫 AJAX 前端,而後 GWT 會交叉編譯到優化的JavaScript 中,而 JavaScript 能夠自動在全部主要瀏覽器上運行。GWT容許開發人員使用 Java 編程語言快速構建和維護複雜但性能高的 JavaScript 前端應用程序,從而下降了開發難度,尤爲是與 Eclipse Google 插件結合使用時,優點更明顯web

 

GWT 經過很是簡單的 RPC 與服務器通訊編程

  GWT支持一組開放的傳輸協議,例如 JSON 和 XML,但 GWT RPC 使全部 Java 通訊都特別輕鬆且有效。相似於傳統 JavaRMI,只需建立一個用於指定您要調用的遠程方法的接口。從瀏覽器調用遠程方法時,GWT RPC將自動串行化參數,並調用服務器上的適當方法,而後反串行化客戶端代碼的返回值。GWT RPC也將很是成熟,其能夠處理多態類層次結構、對象圖循環,甚至能夠跨網拋出異常json

建立GWT RPC鏈接的三個步驟:
1:建立接口繼承RemoteServive接口,而且建立自定義的RPC接口方法---服務接口

2:建立指定Servlet服務,經過繼承RemoteServiceServlet,而且實現1中建立的接口,並實現自定義方法

3:建立異步接口,與類名,方法名,參數相關的方式去建立接口方法,而後使用AsyncCallback<String> arg的方

式,給接口方法添加參數,用於回調函數.注意方法返回void

注意命名規範
服務接口與異步接口中類名必須符合規範
MyService ---實現的Servlet命名爲MyServiceImpl
MyServiceAsync --異步接口

在定義異步接口的方法時,必須保證方法名,參數名一致的狀況下,在參數部分再添加一個AsyncCallback參數

遠程的Servlet須要進行配置註解,以及須要在web.xml中進行配置Servlet,注意註解值須要和url-pattern同樣
@RemoteServiceRelativePath("myService").

<servlet>
<servlet-name>myServiceImpl</servlet-name>
<servlet-class>com.example.foo.server.MyServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServiceImpl</servlet-name>
<url-pattern>/com.example.foo.Foo/myService</url-pattern>
</servlet-mapping>

若是module在xml文件中使用了別名(rename-to attribute),那麼能夠不用包名

特別注意:須要將gwt-servlet.jar拷貝到web-inf/lib目錄下,以及將java輸出目錄爲/WEB-INF/classes.

編寫客戶端代碼進行調用RPC:
建立的方式仍是爲GWT.create()

1:聲明一個RPC接口對象的實例
MyEmailServiceAsync emailService = (MyEmailServiceAsync) GWT.create(MyEmailService.class);

2:編寫對應回調方法的實例
AsyncCallback callback = new AsyncCallback() {
public void onSuccess(Void result) {
// do some UI stuff to show success
}

public void onFailure(Throwable caught) {
// do some UI stuff to show failure
}
};

3:調用接口實例的方法
emailService.emptyMyInbox(fUsername, fPassword, callback);

也能夠直接使用參數中加入匿名實例的方式進行調用

使用集合時,須要使用@gwt.typeArgs <java.lang.String> 註釋指明返回結果,參數集合類型


List reverseListAndConvertToStrings(List c);

監聽RPC中的異常---包括 Checked Exceptions 和Unexpected Exceptions


手動發起異步的http請求---可用於json
Using HTTP in GWT

1:須要在xml文件加載<inherits name="com.google.gwt.http.HTTP" />

2:RequestBuilder是用於HTTP請求的核心類

RequestBuilder使用的方法
1:建立一個對象的實例
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url));
構造方法的參數爲:請求方式,URL地址...(URL.encode()用於過濾URL)

2:建立對應的監聽函數對象 Request對象
Request request = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// Couldn't connect to server (could be timeout, SOP violation, etc.) 
} //錯誤監聽

public void onResponseReceived(Request request, Response response) {
if (200 == response.getStatusCode()) {
// Process the response in response.getText()
} else {
// Handle the error. Can get the status text from response.getStatusText()
}
} //接收到返回信息 
});

接收後可使用Response.getText(),來獲取內容.若是是xml或者json可使用類庫進行轉換


在RPC中調用時,若是有返回值,可使用onSuccess()方法的重載來實現
calService.getPeople(startRow, maxRows, new AsyncCallback<Person[]>() {

// When the RPC returns, this code will be called if the RPC fails
public void onFailure(Throwable caught) {
statusLabel.setText("Query failed: " + caught.getMessage());
acceptor.failed(caught);
}

// When the RPC returns, this code is called if the RPC succeeds
public void onSuccess(Person[] result) {
lastStartRow = startRow;
lastMaxRows = maxRows;
lastPeople = result;
pushResults(acceptor, startRow, result);
statusLabel.setText("Query reutrned " + result.length + " rows.");
}
});瀏覽器

 

轉載出處:http://hi.baidu.com/untra_/item/0942c0311ea36ee0a884289d服務器

相關文章
相關標籤/搜索