天天看點

GWT - GWT Designer開發Ajax應用 (04)

前篇: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中有問題。

GWT - GWT Designer開發Ajax應用 (04)

圖1

2. 建立一個GWT Java Project。

GWT - GWT Designer開發Ajax應用 (04)

圖2

得到,

GWT - GWT Designer開發Ajax應用 (04)

圖3

點選Next,

GWT - GWT Designer開發Ajax應用 (04)

圖4

如上圖将項目名稱設定為Seeya,點選Next,

GWT - GWT Designer開發Ajax應用 (04)

圖5

如上圖,選中Create GWT Module,将Module Name設定為Seeya(任意合法字元串,可以和項目名稱不同),Package Name設定為com.pnft.ajax。點選Finish按鈕,得到:

GWT - GWT Designer開發Ajax應用 (04)

圖6

GWT Designer為我們做了以下幾件事情:

- 引入JRE

- 引入GWT1.4.62相關jar包

- 建立了源檔案目錄src,以及相關子目錄:

  - 建立了包com.pnft.ajax

  - 建立了包com.pnft.ajax.client

  - 建立了包com.pnft.ajax.server

- 建立了一些檔案

具體見上圖。至此,項目建立完成。

3. 建立一個GWT remote service,如下圖:

GWT - GWT Designer開發Ajax應用 (04)

圖7

注意:一定要在com.pnft.ajax.client這個包上建立。通過上述操作,得到:

GWT - GWT Designer開發Ajax應用 (04)

圖8

輸入SeeyaService作為GWT remote service的name。點選Finish,

GWT - GWT Designer開發Ajax應用 (04)

圖9

這一步增加了3個java檔案:

- SeeyaService.java                     :定義Remote Service的接口

- SeeyaServiceAsync.java          :

- SeeyaServiceImpl.java             :Remote Service在伺服器端的實作

4. 定義Remote Service的接口方法:

GWT - GWT Designer開發Ajax應用 (04)

圖10

在上圖中,定義了一個接口方法:

    public String seeya(String name);

儲存SeeyaService.java檔案,這會導緻在SeeyaServiceAsync.java和SeeyaServiceImpl.java中,增加如下兩圖高亮部分的代碼:

GWT - GWT Designer開發Ajax應用 (04)

圖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);

GWT - GWT Designer開發Ajax應用 (04)

圖12

準備在上圖中實作在SeeyaService接口中定義的seeya方法。@Override這個annotation可以删除,因為JDK1.6預設的就是這樣,保留這個annotation也沒有問題。

5. 修改頁面檔案(即Seeya.java)的Encoding屬性為UTF-8,否則不能正常顯示漢字,因為該檔案最終将通過GWT編譯成一個javascript檔案和一個html檔案。

GWT - GWT Designer開發Ajax應用 (04)

圖13

GWT - GWT Designer開發Ajax應用 (04)

圖14

6. 修改Seeya.java檔案的界面如下:

GWT - GWT Designer開發Ajax應用 (04)

圖15

文本框屬性:

text                               空白

variable                       textBoxGreeting

送出按鈕屬性:

text                               送出

variable                       buttonSubmit

儲存上述資訊。

7. 給送出按鈕(buttonSubmit)增加代碼。

GWT - GWT Designer開發Ajax應用 (04)

圖16

GWT - GWT Designer開發Ajax應用 (04)

圖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方法如下:

GWT - GWT Designer開發Ajax應用 (04)

圖18

我們可以看到SeeyaServiceImpl類繼承了RomoteServiceServlet,是以它實際上是一個Servlet。到此,是以開發工作全部完成。

9. 在hosted mode下運作

GWT - GWT Designer開發Ajax應用 (04)

圖19

得到,

GWT - GWT Designer開發Ajax應用 (04)

圖20

輸入“玄機逸士”,點選送出按鈕,得到:

GWT - GWT Designer開發Ajax應用 (04)

圖21

這表明在hosted mode下運作結果正确。

10. 部署。

GWT - GWT Designer開發Ajax應用 (04)

圖22

部署到D:/Tomcat6/webapps目錄下:

GWT - GWT Designer開發Ajax應用 (04)

圖23

點選OK按鈕。下圖顯示部署成功。

GWT - GWT Designer開發Ajax應用 (04)

圖24

11. 啟動Tomcat6(如果沒有啟動的話)。運作結果如下:

- 在IE6中:

GWT - GWT Designer開發Ajax應用 (04)

圖25

輸入“玄機逸士”,點選送出按鈕,得到:

GWT - GWT Designer開發Ajax應用 (04)

圖26

這說明在IE6中運作結果是正确的。

- 在FireFox3中

GWT - GWT Designer開發Ajax應用 (04)

圖27

輸入“玄機逸士”,點選送出按鈕,得到:

GWT - GWT Designer開發Ajax應用 (04)

圖28

這說明在FireFox3中運作結果是正确的。

12. 兩個重要的xml檔案。

GWT - GWT Designer開發Ajax應用 (04)

圖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中。

GWT - GWT Designer開發Ajax應用 (04)

圖30

将Seeya.war用Winrar解包後的目錄結果如下:

GWT - GWT Designer開發Ajax應用 (04)

圖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)

上一篇: gwt zk echo

繼續閱讀