GWT 加入服务端代码 ,从服务端返回数据


1.  在上一节代码基础上,创建Remote

已经有client端了,必须再创建Server端代码,GWT中也就是Remote,方式和Client类似

 

工程右键,New——>Other,选择Cypal Studio 下的GWT Remote Service,如下:



Finish后,看工程目录,com.mooing.server中已经存在LoginServiceImpl类,也就是我们服务端Servlet,同时在web.xml中也注入了此 Servlet信息。

此时工程代码结构:


 

为了进行异步调用,在Client端必须定义一个继承自接口RemoteService的接口,在我们的这个例子中,打开刚才创建的LoginService,看到已经继承RemoteService接口,是刚才创建时自动生成的;

 

2. 接下来我们在客户端加入一个模拟验证登录方法checkLogin(),如下

package com.mooing.client;

 import com.google.gwt.core.client.GWT;

import com.google.gwt.user.client.rpc.RemoteService;

importcom.google.gwt.user.client.rpc.RemoteServiceRelativePath;

 @RemoteServiceRelativePath("loginAction")

publicinterface LoginServiceextendsRemoteService {

       boolean checkLogin();

     publicstaticclass Util {

        publicstatic LoginServiceAsync getInstance() {

            return GWT.create(LoginService.class);

       }

    }

 }

 

3. 保存后,我们会看到LoginServiceAsync里会自动加上此方法;

package com.mooing.client;

 import com.google.gwt.user.client.rpc.AsyncCallback;

 publicinterface LoginServiceAsync {

        void checkLogin(AsyncCallback<Boolean>callback);

 }

 

 

在客户端定义完接口之后,我们必须在服务器端实现这个接口,在我们的例子中,类LoginServiceImpl实现了接口LoginService,同时你也会注意到LoginServiceImpl也继承了类RemoteServiceServlet,而RemoteServiceServlet是HttpServlet的一个子类,这样我们的客户端的请求就可以提交到LoginServiceImpl上面,LoginServiceImpl代码如下:

 

package com.mooing.server;

 import com.mooing.client.LoginService;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

 publicclass LoginServiceImplextendsRemoteServiceServletimplements LoginService {

    privatestaticfinallongserialVersionUID = 4186686448163034698L;

     public String checkLogin() {

       return"This string from server";

    }

}

 

 

4. 最后需要建一个客户端测试类,同上面的方法,新建一个客户端module 类叫LoginTest,我们这个工程中我们使用它来进行向server端的异步调用,代码如下:

 

package com.mooing.client;

 

import com.google.gwt.core.client.EntryPoint;

import com.google.gwt.core.client.GWT;

importcom.google.gwt.user.client.rpc.AsyncCallback;

importcom.google.gwt.user.client.rpc.ServiceDefTarget;

import com.google.gwt.user.client.ui.Button;

importcom.google.gwt.user.client.ui.ClickListener;

import com.google.gwt.user.client.ui.Label;

import com.google.gwt.user.client.ui.RootPanel;

import com.google.gwt.user.client.ui.Widget;

 

publicclass LoginTestimplements EntryPoint{

     publicvoid onModuleLoad() {

       finalLoginServiceAsync loginService = (LoginServiceAsync) GWT.create(LoginService.class);

       ServiceDefTarget target =(ServiceDefTarget) loginService;

       String staticResponseURL = GWT.getModuleBaseURL();

       staticResponseURL +="/loginAction";

       target.setServiceEntryPoint(staticResponseURL);

        final Label label=new Label();

       final Buttonbutton =new Button("Get String");

        button.addClickListener(new ClickListener() {

          publicvoid onClick(Widget sender) {

             loginService.checkLogin(new AsyncCallback() {

                 publicvoid onSuccess(Object result) {

                    label.setText((String)result);

                 }

                 publicvoid onFailure(Throwable caught) {

                    label.setText(caught.getMessage());

                 }

             });

          }

       });

        RootPanel.get().add(button);

       RootPanel.get().add(label);

    }

}

 

注意:需要在LoginTest.gwt.xml中加入

<servletclass="com.mooing.server.LoginServiceImpl"path="/loginAction"/>,代码中的staticResponseURL +="/loginAction";就对应这个路径和web.xml中的对应。

 

测试运行,这回运行时Module要配置LoginTest客户端。



运行点击后,看见返回的字符串,此时已完成gwt的全部异步交互流程。



到此为止,客户端请求,服务端返回数据完成,虽然很简单一句话,但代表这整个GWT流程;接下来就需要熟悉GWT各种控件、面板、样式等。


参考资料:

http://wenku.baidu.com/view/76a6b46c58fafab069dc02bf.html

http://www.doc88.com/p-316736407370.html




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值