前篇:http://blog.csdn.net/pathuang68/archive/2009/04/25/4123646.aspx
目标:實作遠端過程調用(RPC)。
注意:如果看不到完整的圖檔,可以滑鼠右鍵->“圖檔另存為”的方法,存到本地看即可。
1. 首先如下圖,将GWT從版本1.5.3downgrade到1.4.62。因為用GWT1.5.3開發RPC應用,在IE6中有問題。

圖1
2. 建立一個GWT Java Project。
圖2
得到,
圖3
點選Next,
圖4
如上圖将項目名稱設定為Seeya,點選Next,
圖5
如上圖,選中Create GWT Module,将Module Name設定為Seeya(任意合法字元串,可以和項目名稱不同),Package Name設定為com.pnft.ajax。點選Finish按鈕,得到:
圖6
GWT Designer為我們做了以下幾件事情:
- 引入JRE
- 引入GWT1.4.62相關jar包
- 建立了源檔案目錄src,以及相關子目錄:
- 建立了包com.pnft.ajax
- 建立了包com.pnft.ajax.client
- 建立了包com.pnft.ajax.server
- 建立了一些檔案
具體見上圖。至此,項目建立完成。
3. 建立一個GWT remote service,如下圖:
圖7
注意:一定要在com.pnft.ajax.client這個包上建立。通過上述操作,得到:
圖8
輸入SeeyaService作為GWT remote service的name。點選Finish,
圖9
這一步增加了3個java檔案:
- SeeyaService.java :定義Remote Service的接口
- SeeyaServiceAsync.java :
- SeeyaServiceImpl.java :Remote Service在伺服器端的實作
4. 定義Remote Service的接口方法:
圖10
在上圖中,定義了一個接口方法:
public String seeya(String name);
儲存SeeyaService.java檔案,這會導緻在SeeyaServiceAsync.java和SeeyaServiceImpl.java中,增加如下兩圖高亮部分的代碼:
圖11
在這裡增加了一個接口SeeyaServiceAsync和一個seeya接口方法。注意seeya接口方法的傳回值必須是void的。在這個接口中,接口方法的參數總是比在SeeyaService接口中的相應的接口方法的參數多出一個AsyncCallback callback參數,并且總是在參數清單的最後,如上圖。
如果,在SeeyaService接口中,接口方法seeya的定義是:
public String seeya(String name, String password);
那麼,在SeeyaServiceAsync接口中, 接口方法seeya的定義就是:
public void seeya(String name, String password, AsyncCallback callback);
圖12
準備在上圖中實作在SeeyaService接口中定義的seeya方法。@Override這個annotation可以删除,因為JDK1.6預設的就是這樣,保留這個annotation也沒有問題。
5. 修改頁面檔案(即Seeya.java)的Encoding屬性為UTF-8,否則不能正常顯示漢字,因為該檔案最終将通過GWT編譯成一個javascript檔案和一個html檔案。
圖13
圖14
6. 修改Seeya.java檔案的界面如下:
圖15
文本框屬性:
text 空白
variable textBoxGreeting
送出按鈕屬性:
text 送出
variable buttonSubmit
儲存上述資訊。
7. 給送出按鈕(buttonSubmit)增加代碼。
圖16
圖17
上圖高亮部分的代碼,就是給buttonSubmit增加了一個onClick消息處理方法。下面我們來編寫相關代碼,最後使得代碼如下:
public void onClick(final Widget sender)
{
// 擷取SeeyaServiceAsync對象
SeeyaServiceAsync ssa = (SeeyaServiceAsync)GWT.create(SeeyaService.class);
// 設定ServiceEntryPoint的URL
((ServiceDefTarget)ssa).setServiceEntryPoint(GWT.getModuleBaseURL() +
"SeeyaService");
// 調用在SeeyaServiceAsync.java中聲明的seeya方法
ssa.seeya(textBoxGreeting.getText(), new AsyncCallback()
{
public void onFailure(Throwable caught)
{
// 失敗
Window.alert("Failed to get response form server:/n" + caught.getMessage());
}
public void onSuccess(Object result)
{
// result為從伺服器端傳回的結果
String returnStr = (String)result;
// 将textBoxGreeting的内容設定為returnStr
textBoxGreeting.setText(returnStr);
}
});
}
8. 在伺服器端實作在SeeyaService.java中定義的seeya方法如下:
圖18
我們可以看到SeeyaServiceImpl類繼承了RomoteServiceServlet,是以它實際上是一個Servlet。到此,是以開發工作全部完成。
9. 在hosted mode下運作
圖19
得到,
圖20
輸入“玄機逸士”,點選送出按鈕,得到:
圖21
這表明在hosted mode下運作結果正确。
10. 部署。
圖22
部署到D:/Tomcat6/webapps目錄下:
圖23
點選OK按鈕。下圖顯示部署成功。
圖24
11. 啟動Tomcat6(如果沒有啟動的話)。運作結果如下:
- 在IE6中:
圖25
輸入“玄機逸士”,點選送出按鈕,得到:
圖26
這說明在IE6中運作結果是正确的。
- 在FireFox3中
圖27
輸入“玄機逸士”,點選送出按鈕,得到:
圖28
這說明在FireFox3中運作結果是正确的。
12. 兩個重要的xml檔案。
圖29
- web.xml檔案:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>com.pnft.ajax.server.SeeyaServiceImpl</servlet-name>
<servlet-class>com.pnft.ajax.server.SeeyaServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>com.pnft.ajax.server.SeeyaServiceImpl</servlet-name>
<url-pattern>/SeeyaService</url-pattern>
</servlet-mapping>
</web-app>
另外一個重要的xml檔案已經被打包在Seeya.war中。
圖30
将Seeya.war用Winrar解包後的目錄結果如下:
圖31
我們發現由一個Seeya.gwt.xml檔案,其内容如下:
<module>
<inherits name="com.google.gwt.user.User"/>
<entry-point class="com.pnft.ajax.client.Seeya"/>
<servlet path="/SeeyaService" class="com.pnft.ajax.server.SeeyaServiceImpl"/>
</module>
Seeya.gwt.xml中主要定義了web應用的入口點和一個Servlet,注意該Servlet的定義要和web.xml嚴格保持一緻。
後篇:GWT - GWT Designer開發Ajax應用 (05)