GWT - GWT Designer开发Ajax应用 (04)

前篇:http://blog.csdn.net/pathuang68/archive/2009/04/25/4123646.aspx

 

目标:实现远程过程调用(RPC)。

注意:如果看不到完整的图片,可以鼠标右键->“图片另存为”的方法,存到本地看即可。

 

1. 首先如下图,将GWT从版本1.5.3downgrade1.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 servicename。点击Finish

 

9

这一步增加了3java文件:

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

- SeeyaServiceAsync.java         

- SeeyaServiceImpl.java             Remote Service在服务器端的实现

 


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

 

10

在上图中,定义了一个接口方法:

    public String seeya(String name);

 

保存SeeyaService.java文件,这会导致在SeeyaServiceAsync.javaSeeyaServiceImpl.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);

        // 设定ServiceEntryPointURL

        ((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.warWinrar解包后的目录结果如下:

 

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值