`
raymond.chen
  • 浏览: 1437181 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

通过GWT RPC实现客户端与服务器端的交互

    博客分类:
  • GWT
阅读更多

GWT有两种与服务端进行交互的技术:GWT RPC和基于普通AJAX的远程交互技术。这里只介绍GWT RPC技术。

 

一个完整的RPC服务至少包含三个Java文件:

     1、客户端远程接口类,需要继承RemoteService类

     2、客户端远程接口类的异步类,异步类的名称格式是: 客户端远程接口类名 + Async 后缀

     3、服务器端的远程接口类,需要继承RemoteServiceServlet类和实现客户端远程接口类

    

     客户端相关的类必须位于client包及其子包下,服务器端相关的类必须位于server包及其子包下。

 

1、客户端远程接口类 源码

/**
 * 客户端远程接口类需要继承RemoteService类
 */
public interface PersonService extends RemoteService {
	public Person getPerson(String name, int age) throws RuntimeException;
	
	//使用内部类创建客户端远程接口类的异步类
	public static class Utils{
		private static PersonServiceAsync serviceAsync;
		
		public static PersonServiceAsync getInstance(){
			if(serviceAsync==null){
				serviceAsync = (PersonServiceAsync) GWT.create(PersonService.class);
			}
			return serviceAsync;
		}
	}
}

 

2、客户端远程接口类的异步类 源码

/**
 * 异步接口的方法返回值均为void,并且其对应的每个方法都比原接口多一个类型为AsyncCallback的参数
 */
public interface PersonServiceAsync {
	public void getPerson(String name, int age, AsyncCallback callback) throws RuntimeException;
}

 

3、服务器端的远程接口类 源码

/**
 * 实现类要继承RemoteServiceServlet类
 */
public class PersonServiceImpl extends RemoteServiceServlet implements PersonService {
	public Person getPerson(String name, int age) throws RuntimeException {
		//与HTTP的交互
		HttpServletRequest request = this.getThreadLocalRequest();
		HttpServletResponse response = this.getThreadLocalResponse();
		HttpSession session = request.getSession();
		
		return new Person(name, age);
	}
}

 

4、交互过程中传递的对象

/**
 * 在GWT RPC中,如果要交互的数据(方法的参数和返回值)是一个复杂类型的话,
 * 那么这个类要实现IsSerializable接口,来使该类能被正常序列化和反序列化。
 */
public class Person implements IsSerializable {
	private String name;
	private int age;
	
	public Person(){
		
	}
	
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	
	//省略getter、setter方法
}

 

5、GWT应用入口点类需要实现EntryPoint接口,其源码如下

public class Index implements EntryPoint {
	public void onModuleLoad() {
		Button button = new Button("Click me");
    
		VerticalPanel vPanel = new VerticalPanel();
		vPanel.setWidth("100%");
		vPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
		vPanel.add(button);

		RootPanel.get().add(vPanel);
		
		//按钮的单击事件
		button.addClickListener(new ClickListener() {
			public void onClick(Widget sender) {
				//初始化Service接口
				PersonServiceAsync personService = PersonService.Utils.getInstance();
        
				//为Service代理描述Service接入点的URL
				ServiceDefTarget target = (ServiceDefTarget)personService;
				String path = GWT.getModuleBaseURL() + "PersonService";
				target.setServiceEntryPoint(path);
        
				//发出RPC请求
				personService.getPerson("cjm", 100, new AsyncCallback(){
					public void onSuccess(Object result) {
						Person person = (Person)result;
						Window.alert(person.getName());
					}
					
					public void onFailure(Throwable caught) {
						Window.alert(caught.getMessage());
					}
				});
        
			}
		});
		
	}
}

 

6、在Index.gwt.xml文件中增加以下配置信息

    将RPC服务与GWT应用入口点类关联起来

<servlet path="/PersonService" class="com.cjm.server.PersonServiceImpl"/>

 

7、在web.xml文件增加以下配置信息

<!-- 在宿主模式下启动应用时,此servlet是必须的 -->
<servlet>
	<servlet-name>shell</servlet-name>
	<servlet-class>com.google.gwt.dev.shell.GWTShellServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>shell</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>

<!-- RPC服务配置 -->
<servlet>
	<servlet-name>PersonService</servlet-name>
	<servlet-class>com.cjm.server.PersonServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>PersonService</servlet-name>
	<url-pattern>/PersonService</url-pattern>
</servlet-mapping>

       

分享到:
评论
2 楼 raymond.chen 2011-08-14  
这是GWT中RPC的处理机制,建议了解一下相关方面的原理
1 楼 woodhaojava 2011-08-08  
刚刚开始看GWT.
写的很详细,很清楚.
补充一下,第6点中,除了用XML配置,还可以在PersonService中使用注解:
@RemoteServiceRelativePath("personService")
public interface PersonService extends RemoteService ...

再请教一个问题,service,serviceAsync中的方法,为什么会存在那样的联系.
还有,后者是一个接口,实现类我们没有写,那他的getPerson,何以可以调用.
两个问题应该是一个类型.
原代码对我来说有点难度,麻烦看过的大神指点

相关推荐

    基于GWTRPC的通讯软件

    GWTRPC(Google Web Toolkit Remote Procedure Call)是一种由Google Web Toolkit(GWT)提供的远程过程调用机制,用于在客户端JavaScript与服务器端Java之间进行高效、安全的数据通信。GWT是Google开发的一款强大的...

    GWT-RPC-1.pdf

    GWT-RPC采用异步调用的方式,因此在客户端需要定义回调类来处理服务器端方法调用的结果。回调类通常包含两个方法:`onSuccess()`用于处理成功响应,`onFailure()`用于处理失败情况。 ### 示例 #### 获取简单数据 ...

    GWT-RPC.pdf

    GWT-RPC的主要思想是让开发者能够在客户端编写代码来调用服务器端的方法,就像这些方法是本地的一样。这种方式避免了直接处理HTTP请求和响应,简化了开发过程,并提高了应用程序的性能和响应速度。 ### 开发过程...

    gwt开发实例实现

    - **RPC服务**:GWT支持远程过程调用(RPC),使客户端能够与服务器端的Java服务进行通信。 2. **Web + Ajax 实现** - **Ajax技术**:Ajax(Asynchronous JavaScript and XML)允许Web页面在不刷新整个页面的情况...

    GWT与Spring整合经典文章

    4. 在客户端,通过GWT的RPC机制调用服务器端服务,实现数据交换。 5. 使用Hibernate配置数据库连接和实体映射,处理数据持久化。 6. 在服务器端,使用Spring的DispatcherServlet接收GWT的RPC请求,并路由到相应的...

    gwt_spring-nolib.zip

    通过这个示例,你可以学习到如何在GWT应用中使用Spring进行服务层的构建,以及如何利用GWT-RPC进行客户端与服务器端的通信。此外,还可以了解到如何整合数据库操作,以及Spring的依赖注入和事务管理功能。这个例子...

    Gwt连接数据库的案例

    在GWT中,与数据库的通信通常通过服务器端的Java代码实现,因为直接在客户端进行数据库操作会带来安全风险。因此,你需要在服务端创建一个Servlet或RPC服务,这个服务负责处理来自GWT客户端的请求,执行数据库查询,...

    gwt-servlet-2.3.0.jar

    总结来说,`gwt-servlet-2.3.0.jar`是GWT应用服务器端的核心组件,它负责处理客户端的RPC请求,实现业务逻辑,并确保与客户端的通信安全高效。开发者在构建基于GWT的应用时,必须正确配置和使用这个库,以充分利用其...

    GWT通信机制初探

    标题中的“GWT通信机制初探”指的是Google Web Toolkit(GWT)的远程过程调用(RPC)机制,这是GWT框架中用于客户端与服务器端交互的重要方式。GWT允许开发者使用Java编写富互联网应用程序(RIA),并自动编译为...

    hibernate+gwt2.4

    在GWT和Hibernate的集成中,开发者通常会将业务逻辑和数据访问层(DAO)实现为GWT服务,这些服务在服务器端运行,并通过GWT的Remote Procedure Call (RPC)机制与客户端交互。GWT编译器会将Java代码转换成优化过的...

    java源码:Spring4GWT.zip

    RPC允许GWT客户端调用服务器端的方法,就像调用本地方法一样,从而实现了数据的同步和异步交换。 具体来说,simplerpc可能包含以下几个关键组成部分: 1. **Service接口**:定义了客户端可以调用的服务方法,这些...

    gwt实例,基于gwt-windows-1.5.2

    5. **与后台互动**:GWT通过Remote Procedure Calls (RPC)机制实现了客户端与服务器端的通信。当用户在客户端执行某些操作时,GWT会自动将请求转化为HTTP请求发送到服务器,服务器处理后返回结果,再由GWT解析并更新...

    GWT快速开发(GWT) 是一个Java软件开发框架用于开发类似于Google Maps和Gmail的AJAX应用程序。GWT的设计参考Java AWT包设计,类命名规则、接口设计、事件监听等。你可以用Java编程语言开发你的界面,然后用GWT编译器将Java类转换成适合浏览器执行的...

    - GWT支持通过远程过程调用(Remote Procedure Call, RPC)机制与服务器端进行通信。 - 开发者可以通过定义服务接口并实现相应的服务端逻辑,实现前后端的数据交换。 #### 四、GWT实战案例 - **案例1: Hello GWT...

    GWT入门与经典实例解析源码

    GWT通过Remote Procedure Call(RPC)技术实现客户端与服务器端的数据交换。了解如何定义服务接口、创建服务代理以及处理服务回调,是实现后台数据交互的关键。 6. **UI绑定 - MVP模式**: Model-View-Presenter...

    GWT学习笔记,个人学习心得

    【GWT概述】 ...通过RPC机制,GWT简化了客户端与服务器的数据交换,提高了开发效率。通过理解GWT的基本概念、项目结构、RPC工作原理以及配置方法,开发者能够更有效地利用GWT构建复杂的Web应用程序。

    基于Java的Spring4GWT.zip

    开发者可能利用Spring的IoC和AOP特性来管理依赖和处理横切关注点,同时借助Spring MVC构建RESTful API,通过GWT的RPC机制实现前后端数据交互。项目中的“simplerpc”部分可能包含了具体的RPC服务实现,方便客户端...

    GWT入门与经典实例解析

    例如,你可以创建一个简单的登录注册应用,利用GWT的UI组件来设计表单,使用异步RPC处理用户提交的数据,同时进行客户端验证和服务器端验证。此外,还可以探索如何使用GWT进行数据持久化,如通过GWT的GAE(Google ...

    Ext-Gwt(GWT)开发实例(整合Spring +Hibernate)

    在开发过程中,GWT和Spring之间的通信通常通过远程服务调用(RPC)实现,GWT客户端发送请求到Spring管理的服务器端服务,然后由Hibernate处理数据库操作,最后将结果返回给客户端。 在这个实例中,可能包括以下几个...

Global site tag (gtag.js) - Google Analytics