通过GWT RPC实现客户端与服务器端的交互
来源:互联网 发布:淘宝华佗大药房卖假药 编辑:程序博客网 时间:2024/04/28 07:48
本篇文章为转载文章,其主要讲述了GWT-RPC 方式发送数据,比较清晰,但 例子中传送对象Person时会发生错误,我不知能否传送对象类型的数据(之前好像不能),所以改为字符串类型即可; 转载本篇文章的目的 进一步了解GWT-RPC方法发送请求;
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>
0 0
- 通过GWT RPC实现客户端与服务器端的交互
- 通过GWT RPC实现异步交互
- 采用JOSN实现服务器端与客户端的交互
- 手机App客户端与服务器端的交互
- 关于服务器端与客户端的交互
- android客户端与服务器端的简单交互
- Http客户端与服务器端的交互
- 通过WebView实现页面与ANDRIOD客户端的交互
- 客户端与服务器端交互原理
- 客户端与服务器端交互原理
- json 实现客户端和服务器端的数据交互
- 安卓客户端与服务器端交互的工具类
- Android客户端与服务器端的json数据交互
- 客户端与服务器端的交互——上传文件
- Java Socket 客户端与服务器端的简单交互
- Android手机客户端与服务器端的信息通信交互
- Android通过get,post方式客户端与服务器端交互实例(慕课网笔记)
- 通俗易懂客户端与服务器端交互原理
- ②读后感之《如何阅读一本书》 莫提默.J.艾德勒【美】
- 在从1到n的正数中1出现的次数 【微软面试100题 第三十题】
- 下面的代码运行时会不会报错
- Android C++调用JAVA
- 谱聚类算法
- 通过GWT RPC实现客户端与服务器端的交互
- ubuntu 14.04 安装gnome后导致unity默认主题错乱
- 雷军---我看未来20年
- 在对话框中使用ON_UPDATE_COMMAND_UI更新菜单
- CCNA学习笔记Day4
- 【VC编程技巧】控件☞4.2自定义EDIT(只限字母字符输入)
- TextView中利用SpannableString文字设置不同格式
- enum使用技巧
- 《unix高级环境编程》进程环境——异常处理