在文章的第二部分我们已经掌握了如何利用GWT创建一个工程并在工程里添加一个GWT应用程序,同样我们这一部分也需要创建一个GWT的工程,并添加一个GWT应用程序,由于默认创建的GWT程序不含有Server端的示例代码,我们必须手工加进去。我们创建好的工程GWTSample如图七所示。我们将要介绍的实例主要功能是采用异步通信的方式从服务器端取出一个字符串显示在HTML页面上。这个例子虽然简单,但却包含了如何利用GWT进行Ajax开发的主要流程。
图七:GWTSample工程结构
大家注意到我们这个工程里面有个com.sample.myProject.server包,这个包里面包含有运行在服务器端的代码。我们从客户端发送的请求也是发送到这个包里面的一个Servlet上去的。
为了进行异步调用,在Client端必须定义一个继承自接口RemoteService的接口,在我们的这个例子中,我们定义了接口SampleService,SampleService的代码如清单4所示。
1 package com.sample.myProject.client;
2 import com.google.gwt.user.client.rpc.RemoteService;
3 public interface SampleService extends RemoteService{
4 //The implementation of this method is used to return a string
5 String getString();
6 }
大家注意到这个接口继承自RemoteService,并且声明了一个方法getString();,这个方法会在服务器端的代码中实现。当然,大家可能现在已经意识到,这里声明的方法就是我们采用异步调用方式所能够调用的方法。
在声明完这个接口之后,我们还必须声明另外一个异步调用接口,在我们的例子中是接口SampleServiceAsync,这个接口里声明的方法名称必须与SampleService里面的相同,但是多个一个类型为AsyncCallback的参数,接口SampleServiceAsync的代码清单如清单5所示:
清单5:SampleServiceAsync代码清单
1 package com.sample.myProject.client;
2 import com.google.gwt.user.client.rpc.AsyncCallback;
3 public interface SampleServiceAsync {
4 void getString(AsyncCallback callback);
5}
在客户端定义完接口之后,我们必须在服务器端实现这个接口,在我们的例子中,类SampleServiceImpl实现了接口SampleService,同时你也会注意到SampleServiceImpl也继承了类RemoteServiceServlet,而RemoteServiceServlet是HttpServlet的一个子类,这样我们的客户端的请求就可以提交到Servlet SampleServiceImpl上面。类SampleServiceImpl的代码清单如清单6所示:
清单6:SampleServiceImpl代码清单
1 package com.sample.myProject.server;
2 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
3 import com.sample.myProject.client.SampleService;
4public class SampleServiceImpl extends RemoteServiceServlet implements
5 SampleService {
6 public String getString() {
7 return "This string is from server";
8 }
9}
最后我们来看一下类DemoClient,这个类和我们在第二部分创建的工程myProject中的类DemoClient是同一个类型的。只不过在我们这个工程中我们使用它来进行向server端的异步调用。清单7列出了类DemoClient的代码。
图七:GWTSample工程结构
大家注意到我们这个工程里面有个com.sample.myProject.server包,这个包里面包含有运行在服务器端的代码。我们从客户端发送的请求也是发送到这个包里面的一个Servlet上去的。
为了进行异步调用,在Client端必须定义一个继承自接口RemoteService的接口,在我们的这个例子中,我们定义了接口SampleService,SampleService的代码如清单4所示。
1 package com.sample.myProject.client;
2 import com.google.gwt.user.client.rpc.RemoteService;
3 public interface SampleService extends RemoteService{
4 //The implementation of this method is used to return a string
5 String getString();
6 }
大家注意到这个接口继承自RemoteService,并且声明了一个方法getString();,这个方法会在服务器端的代码中实现。当然,大家可能现在已经意识到,这里声明的方法就是我们采用异步调用方式所能够调用的方法。
在声明完这个接口之后,我们还必须声明另外一个异步调用接口,在我们的例子中是接口SampleServiceAsync,这个接口里声明的方法名称必须与SampleService里面的相同,但是多个一个类型为AsyncCallback的参数,接口SampleServiceAsync的代码清单如清单5所示:
清单5:SampleServiceAsync代码清单
1 package com.sample.myProject.client;
2 import com.google.gwt.user.client.rpc.AsyncCallback;
3 public interface SampleServiceAsync {
4 void getString(AsyncCallback callback);
5}
在客户端定义完接口之后,我们必须在服务器端实现这个接口,在我们的例子中,类SampleServiceImpl实现了接口SampleService,同时你也会注意到SampleServiceImpl也继承了类RemoteServiceServlet,而RemoteServiceServlet是HttpServlet的一个子类,这样我们的客户端的请求就可以提交到Servlet SampleServiceImpl上面。类SampleServiceImpl的代码清单如清单6所示:
清单6:SampleServiceImpl代码清单
1 package com.sample.myProject.server;
2 import com.google.gwt.user.server.rpc.RemoteServiceServlet;
3 import com.sample.myProject.client.SampleService;
4public class SampleServiceImpl extends RemoteServiceServlet implements
5 SampleService {
6 public String getString() {
7 return "This string is from server";
8 }
9}
最后我们来看一下类DemoClient,这个类和我们在第二部分创建的工程myProject中的类DemoClient是同一个类型的。只不过在我们这个工程中我们使用它来进行向server端的异步调用。清单7列出了类DemoClient的代码。