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

前篇:http://blog.youkuaiyun.com/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、付费专栏及课程。

余额充值