GWT RPC
GWT RPC
GWT RPC
Remote Procedure Calls
GWT:
Google Web Toolkit的缩写,有了 GWT可以使用 Java 编程语言编写 AJAX 前端,然后 GWT 会交叉编译到优化的JavaScript 中,而 JavaScript 可以自动在所有主要浏览器上运行。GWT允许开发人员使用 Java 编程语言快速构建和维护复杂但性能高的 JavaScript 前端应用程序,从而降低了开发难度,尤其是与 Eclipse Google 插件结合使用时,优势更明显
GWT 通过非常简单的 RPC 与服务器通信
GWT支持一组开放的传输协议,例如 JSON 和 XML,但 GWT RPC 使所有 Java 通信都特别轻松且有效。类似于传统 JavaRMI,只需创建一个用于指定您要调用的远程方法的接口。从浏览器调用远程方法时,GWT RPC将自动串行化参数,并调用服务器上的适当方法,然后反串行化客户端代码的返回值。GWT RPC也将非常成熟,其可以处理多态类层次结构、对象图循环,甚至可以跨网抛出异常
创建GWT RPC连接的三个步骤:
1:创建接口继承RemoteServive接口,并且创建自定义的RPC接口方法---服务接口
2:创建指定Servlet服务,通过继承RemoteServiceServlet,并且实现1中创建的接口,并实现自定义方法
3:创建异步接口,与类名,方法名,参数相关的方式去创建接口方法,然后使用AsyncCallback<String> arg的方
式,给接口方法添加参数,用于回调函数.注意方法返回void
注意命名规范
服务接口与异步接口中类名必须符合规范
MyService ---实现的Servlet命名为MyServiceImpl
MyServiceAsync --异步接口
在定义异步接口的方法时,必须保证方法名,参数名一致的情况下,在参数部分再添加一个AsyncCallback参数
远程的Servlet需要进行配置注解,以及需要在web.xml中进行配置Servlet,注意注解值需要和url-pattern一样
@RemoteServiceRelativePath("myService").
<servlet>
<servlet-name>myServiceImpl</servlet-name>
<servlet-class>com.example.foo.server.MyServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServiceImpl</servlet-name>
<url-pattern>/com.example.foo.Foo/myService</url-pattern>
</servlet-mapping>
如果module在xml文件中使用了别名(rename-to attribute),那么可以不用包名
特别注意:需要将gwt-servlet.jar拷贝到web-inf/lib目录下,以及将java输出目录为/WEB-INF/classes.
编写客户端代码进行调用RPC:
创建的方式还是为GWT.create()
1:声明一个RPC接口对象的实例
MyEmailServiceAsync emailService = (MyEmailServiceAsync) GWT.create(MyEmailService.class);
2:编写对应回调方法的实例
AsyncCallback callback = new AsyncCallback() {
public void onSuccess(Void result) {
// do some UI stuff to show success
}
public void onFailure(Throwable caught) {
// do some UI stuff to show failure
}
};
3:调用接口实例的方法
emailService.emptyMyInbox(fUsername, fPassword, callback);
也可以直接使用参数中加入匿名实例的方式进行调用
使用集合时,需要使用@gwt.typeArgs <java.lang.String> 注释指明返回结果,参数集合类型
如
List reverseListAndConvertToStrings(List c);
监听RPC中的异常---包括 Checked Exceptions 和Unexpected Exceptions
手动发起异步的http请求---可用于json
Using HTTP in GWT
1:需要在xml文件加载<inherits name="com.google.gwt.http.HTTP" />
2:RequestBuilder是用于HTTP请求的核心类
RequestBuilder使用的方法
1:创建一个对象的实例
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url));
构造方法的参数为:请求方式,URL地址...(URL.encode()用于过滤URL)
2:创建对应的监听函数对象 Request对象
Request request = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// Couldn't connect to server (could be timeout, SOP violation, etc.)
} //错误监听
public void onResponseReceived(Request request, Response response) {
if (200 == response.getStatusCode()) {
// Process the response in response.getText()
} else {
// Handle the error. Can get the status text from response.getStatusText()
}
} //接收到返回信息
});
接收后可以使用Response.getText(),来获取内容.如果是xml或者json可以使用类库进行转换
在RPC中调用时,如果有返回值,可以使用onSuccess()方法的重载来实现
calService.getPeople(startRow, maxRows, new AsyncCallback<Person[]>() {
// When the RPC returns, this code will be called if the RPC fails
public void onFailure(Throwable caught) {
statusLabel.setText("Query failed: " + caught.getMessage());
acceptor.failed(caught);
}
// When the RPC returns, this code is called if the RPC succeeds
public void onSuccess(Person[] result) {
lastStartRow = startRow;
lastMaxRows = maxRows;
lastPeople = result;
pushResults(acceptor, startRow, result);
statusLabel.setText("Query reutrned " + result.length + " rows.");
}
});
GWT RPC的更多相关文章
- 通过GWT RPC实现客户端与服务器端的交互
GWT有两种与服务端进行交互的技术:GWT RPC和基于普通AJAX的远程交互技术.这里只介绍GWT RPC技术. 一个完整的RPC服务至少包含三个Java文件: 1.客户端远程接口类,需要继承Rem ...
- GWT RPC机制
GWT RPC GWT RPCRemote Procedure Calls GWT: Google Web Toolkit的缩写,有了 GWT可以使用 Java 编程语言编写 AJAX 前端,然后 G ...
- GXT之旅:第三章:表单和窗口(4)——表单的提交和RPC
表单使用HTTP提交 表单有两种提交方式,第一种就是传统的HTTP提交. 最直接的步骤就是: 使用FormPanel的setAction()方法,去定义submit的URL 使用FormPanel的i ...
- metasploit--exploit模块信息
Name Disclosure Date Rank Description ---- ...
- jmeter 4.0版本更新说明(个人做个记录)总版本更新合集
版本4.0 摘要 新的和值得注意的 不兼容的变化 Bug修复 改进 非功能性变化 已知问题和解决方法 谢谢 新的和值得注意的 核心改进 JMeter现在支持JAVA 9. 提供新的边界提取器元件,提供 ...
- Kali linux 2016.2(Rolling)中的Exploits模块详解
简单来将,这个Exploits模块,就是针对不同的已知漏洞的利用程序. root@kali:~# msfconsole Unable to handle kernel NULL pointer der ...
- 如何在Google Web Toolkit环境下Getshell
出品|MS08067实验室(www.ms08067.com) 本文作者:大盗贼卡卡 Google Web Toolkit简称(GWT),是一款开源Java软件开发框架.今天这篇文章会介绍如何在这样的环 ...
- GWT资料收集
1.别人的GWT笔记 http://www.blogjava.net/peacess/archive/2007/08/06/84950.html 2.GWT系统类库参考手册 http://www.bo ...
- 初次接触GWT,知识点总括
初次接触GWT,知识点概括 前言 本人最近开始研究 GWT(Google Web Toolkit) ,现将个人的一点心得贴出来,希望对刚开始接触 GWT的程序员们有所帮助,也欢迎讨论,共同进步. 先说 ...
随机推荐
- CentOS 6.6下Redis安装
安装redis的过程非常的简单,具体参考教程官网:http://redis.io/download 1.下载并安装 下载的redis-3.2.5.tar.gz安装包默认在/usr/local/src/ ...
- 如何将 Font Awesome 转成 PNG 图标 详细教程 含源代码
最近因为项目上需要用到这个字体图标,但是它里面的许多也不能完全满足项目需要,因此就考虑将这个图标导出,然后自己再添加一些其他图标使用 搜索了些解决方案,如:http://www.oschina.net ...
- html5之meta标签viewport应用
在html5移动页面中,viewport定义必不可少. 首先了解下关于viewport的概念: 先了解移动设备的屏幕尺寸和设备尺寸: iPhone3 设备尺寸 320*480 ; 屏幕尺寸 320* ...
- Commons JXPath - Object Graph Traversal
JXPath 提供了使用 Xpath 语法操纵符合 Java 类命名规范的 JavaBeans 的工具.也支持 maps.DOM 和其他对象模型.对于深层次结构的 JavaBean,使用 JXPath ...
- 如何让Asp.net webAPI返回JSON格式数据
ASP.NET Web API 是新一代的 HTTP 網路服務開發框架,除了可以透過 Visual Studio 2012 快速開發外 (內建於 ASP.NET MVC 4 的 Web API 專案範 ...
- 第六篇、微信小程序-form组件
表单: 将组件内的用户输入的<switch/> <input/> <checkbox/> <slider/> <radio/> <pi ...
- Javascript中的函数
Javascript中的函数 1.什么是函数 函数是被命名的,独立的,完成特定功能的代码段.其可能给调用它的程序返回值,我们把这个代码段就称之为"函数". 被命名的:函数大部分都是 ...
- 跨域访问JSONP CORS
一.JSONP 常用的Jquery框架支持jsonp方式请求,该方式只支持GET方法,传参大小有限,而且需要后台根据jsonp的请求方式进行封装结果返回. 其中参数jsonp默认为callback,j ...
- IE浏览器打开 「兼容性视图」
有些IE上的网页控件需要打开兼容性视图才能使用,不知道是Javascript的原因,还是CSS的原因. 使用环境是用C语言配合boa服务器实现的CGI程序.
- 如何管好.net的内存(托管堆和垃圾回收)
一:C#标准Dispose模式的实现 需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类: 托管资源:由CLR管理分配和释放的资源,即由CL ...