gwt格式_GWT HTTP请求替代方案

gwt格式

由于多种原因 ,许多GWT用户放弃了RPC机制,这是GWT提供的调用后端的标准方法。 他们发现,在GWT RequestBuilder与其他可能不适合其应用程序模型的外部库之间迷失了自己。 这篇文章的目的是要通过GWT中众所周知的HTTP / Rest库来尝试使情况更清晰。 在这篇文章中,我们将测试的库是: RequestBuilder (GWT的一部分), RestyGwt , autorest -gwt ,最后是本机XMLHttpRequest (JsInterop)。

RequestBuilde

首先想到RequestBuilder。 它是核心GWT类的一部分,并允许构建和执行HTTP调用。 RequestBuilder的实现利用JSNI在浏览器中调用本机XMLHttpRequest。 RequestBuilder的缺点是正在处理数据。 它完全留给用户,需要其他工作,并且可能需要使用其他库,例如gwt-jackson。

RequestBuilder request = new RequestBuilder(RequestBuilder.GET, "http://localhost:8085/guest");try {request.sendRequest(null, new RequestCallback(){@Overridepublic void onResponseReceived(Request request, Response response) {GWT.log(response.getText());// You get the response as a String so more processing required to convert/extract data}@Overridepublic void onError(Request request, Throwable exception) {}});} catch (RequestException e) {e.printStackTrace();}

RestyGwt

RestyGWT是一种更全面的解决方案,因为它提供了发送和接收对象的功能,这似乎可以很好地替代RPC。 RestyGwt与RPC的工作方式相同:开发人员使用延迟绑定定义在编译时生成的接口。 它是Github上最受欢迎的GWT项目之一。 RestyGWT还提供了一些方便的功能,例如分派器,JSONP处理,自定义注释等。 如果开发人员希望没有创建接口的样板,RestyGWT提供了一种直接调用HTTP端点的方法,而无需Json序列化/反序列化。 简单的RestyGwt用法示例如下:

public interface GuestService extends RestService {@Path("http://localhost:8085/guest")@GETpublic void get(MethodCallback<List<Guest>> callback);}public void onModuleLoad() {GuestService service = GWT.create(GuestService.class);service.get(new MethodCallback<List<Guest>>(){@Overridepublic void onFailure(Method method, Throwable exception) {GWT.log("Request Failed");}@Overridepublic void onSuccess(Method method, List<Guest> response) {response.forEach((g) -> {GWT.log(g.roomNumber);});}});}

RestyGwt的缺点在于它依赖于Generators,而Generators不会在下一个GWT 3.0版本中提供。 没有迹象表明GWT 2.8.0届时将停止使用,但可以肯定的是,愿意升级到3.0的开发人员必须至少在一段时间内没有RestyGwt。

汽车休息

autorest-gwt是一个有趣的项目,它利用诸如流之类的新范例来生成Rest服务接口。 autorest-gwt基于rxjava-gwt ,它是RxJava对GWT的改编。 为了解决HTTP调用的异步方面,autorest-gwt使用Observable ,这是一个您可以订阅的对象,一旦结果准备好,它将立即通知您。 AutoRest还使用JsInterop来对对象进行序列化/反序列化,作为Java / Js对象的来源。 此方法的优势在于它不依赖任何外部库,但是对可序列化的对象有一些限制( GWT中的JSON序列化将在更多关于这些限制的详细信息中进行讨论)。 autorest-gwt的另一个优点是它使用注释处理器(而不是Generator),这使该库在将来更可行。

@AutoRestGwt @Path("guest") interface GuestService2 {@GET Observable<Guest> get();}static ResourceVisitor osm() { return new RequestResourceBuilder().path("http://localhost:8085/"); }public void onModuleLoad() {GuestService2 gs = new GuestService2_RestServiceModel(() -> osm());gs.get().subscribe(n -> {GWT.log(n.guestId+"");});}

autorest-gwt仍然是一个年轻的项目。 它的版本是0.x(到目前为止有4个发行版),并且还需要一些时间才能成熟。 autorest-gwt还引入了一些样板代码,但仍可管理。

本机XMLHttpRequest(JsInterop)

在GWT客户端,所有以前的库都可以归结为本地XMLHttpRequest,唯一不同的是XMLHttpRequest的包装方式。

自从引入JsInterop以来,事情可以有所不同。 开发人员可以像使用Java类一样使用本机浏览器功能。 直接使用本机XMLHttpRequest也是从GWT客户端进行HTTP调用的一种替代方法。 这种方法有点低级,但是它绝对允许开发人员获得对请求/响应各个方面的控制。 例如,假设由于特殊要求,您希望将响应类型设置为Blob,或将请求类型指定为同步,那么您将无法使用以前的库来这样做,因为您将它们的接口绑定在一起。 为了处理HTTP的异步方面,可以使用Promise ,它是在请求以Java脚本解析时指定要采取的措施的自然方法。 当然,在有效负载和响应对象的序列化/反序列化方面还有更多工作要做,但是此方法允许HTTP请求的各个方面都具有自由度。 例如:

//Implemented using JsInterop, can also be used from Elemental 2 private final XMLHttpRequest nativeRequest = new XMLHttpRequest();//false means that the request is synchronous which can not be done in other librairiesnativeRequest.open("GET", "http://localhost:8085/guest", false);// there are other events such as progress, abort that are not available in other librairiesnativeRequest.addEventListener("load", new Function() {@Overridepublic Object call(JavaScriptObject event) {GWT.log(nativeRequest.responseText);return null;}});nativeRequest.send();

其他

有没有被覆盖,如其他librairies GwtQuery的阿贾克斯是在现实中只是XMLHttpRequest的顶部的inteface,并GWTP的RestDispatch依赖于GIN和似乎更适合于各种应用,利用GWTP的。

结语

图书馆 当前版本 优点 缺点
请求生成器 不适用 –核心GWT库
–无样板,简单
–数据的序列化/反序列化必须由开发人员完成,只有字符串响应/有效负载可用
RestyGWT 2.2.0 –开箱即用的序列化/反序列化
–有用的功能:调度程序,JsonP,处理程序…
–基于发电机
–与泛型有关的问题(有关Github的更多详细信息)
自动休息 0.4 –使用注释处理器
–使用可观察物(也可能是一个缺点)
–样板
–年轻的项目,还不够成熟
–绑定到rxjava-gwt
本机XmlHttpRequest(JsInterop) 不适用 –允许自定义实施
–允许访问低级API选项
–需要Javascript API的知识
–处理响应/有效载荷需要手动完成

未来见解

HTTP请求对于现代Web应用程序是必不可少的,因此GWT项目需要为其用户提供一种可靠且轻松的标准机制来调用HTTP服务。 当前,GWT用户在哪个库有用和哪个库将是未来GWT 3.0发行版的可行选择之间处于困境。 目前,GWT开发人员最好使用本机XmlHttpRequest和JsInterop,因为它是对请求选项提供最佳控制的方法。 GWT开发人员可以创建自己的可重用接口,并且将来可能会出现一种模式。 对于那些希望快速启动并运行的框架,其他框架仍然是不错的选择。 GWT贡献者可能会从gRPC等项目中获得灵感,以设计下一个GWT“ RPC”机制。

翻译自: https://www.javacodegeeks.com/2017/07/gwt-http-requests-alternatives.html

gwt格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

簇的局部变量中布尔类型_java基础2(变量、常量、数据类型)

一、注释&#xff08;1&#xff09;什么是注释&#xff1f;解释说明的文字&#xff08;注释的内容不会被编译&#xff09;&#xff08;2&#xff09;注释的作用①对代码的解释说明 ②便于后期维护&#xff08;3&#xff09;注释的分类:①单行注释 //单行注释作用域:只在当前行有…

python生成海报_生成海报(前端 | python)

我最近没有摸鱼&#xff0c;一直都在工作。只不过目前需要爬一点数据 python 做的&#xff0c;之后看机会分享一下。忙着忙着老大说要生成海报&#xff0c;有个活动要给每个用户来个分享图。想法PS 批处理&#xff1f;脚本&#xff1f; 能甩出去的活都甩出去&#xff0c;机智如…

数位进制转换详解

文章目录进制进制转换二进制和十进制互相转换十进制 → 二进制十进制正整数 → 二进制十进制负整数 → 二进制十进制负小数 → 二进制十进制小数 → 二进制二进制 → 十进制二进制负整数 → 十进制二进制的正整数 → 十进制二进制小数 → 十进制二进制的负小数 → 十进制八进制…

java agent_如何脚踏实地构建Java Agent

java agent在构建Plumbr的多年中&#xff0c;我们遇到了许多具有挑战性的问题。 在其他方面&#xff0c;使Plumbr Java Agent可靠地执行而不会危及客户的应用程序&#xff0c;是一个特别棘手的问题。 从实时系统中安全地收集所有需要的遥测会带来很多问题。 其中一些非常简单&a…

python中链表和数组_数据结构笔记(一):数组、链表|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/(一)数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。1、数组支持随机访问&#xff0c;根据下标随机访问的时间复杂度为 O(1)。通过 a[i]_address a[0]_address i*元…

旋转散点图_聚类分析的结果如何用散点图展示出来?

SPSS系统聚类输出的树状图广受用户喜爱&#xff0c;二阶聚类也可以输出一系列美观的可视化图形用来观察聚类效果&#xff0c;但我们发现Kmeans均值聚类没有提供可视化程度高的图形&#xff0c;那怎么办&#xff0c;我们自己来制作。数据小兵推荐使用3D散点图全方位观察K均值聚类…

async 打包异常_重新打包流中的异常

async 打包异常Java 8已有两年历史&#xff0c;但是仍然存在社区尚未为其开发好的解决方案库的用例&#xff0c;甚至边缘用例。 如何处理流管道中的检查异常就是这样一个问题。 Stream操作接受的功能接口不允许实现抛出已检查的异常&#xff0c;但是我们可能要调用许多方法。 显…

补码基础

关于补码&#xff0c;有如下比较有趣的演化过程: 假如计算机中使用 4 位的二进制表示数据&#xff0c;如图-2&#xff0c;最多能表示 0 到 15(10 进制)&#xff0c;之后有牛人做了 一个细微改动&#xff0c;如图-3&#xff0c;将所有二进制以 1 开头的数(大于 7 的数)放到 0 之…

身份验证错误错误指定的句柄无效_基于 Web 端的人脸识别身份验证「实践」

作者&#xff1a;沫沫 政采云前端团队转发链接&#xff1a;https://mp.weixin.qq.com/s/fRDpXixnLIy9c0Uh2tMezQ前言近些年来&#xff0c;随着生物识别技术的逐渐成熟&#xff0c;基于深度学习的人脸识别技术取得了突破性进展&#xff0c;准确率显著提高。现阶段&#xff0c;人…

打开 谷歌浏览器exe_专治各种网银不服:两步开启微软Edge浏览器IE兼容模式

此前微软已经预告过Microsoft Edge将支持IE模式&#xff0c;即可以在该浏览器下使用IE模式加载某些特定的需要的网站。不过在后续更新中微软又突然改口不再面向普通用户提供此功能&#xff0c;而企业级用户若要使用还需要管理员提前配置。现在这款浏览器的正式版已经发布&#…

java单例枚举_Java增强枚举的用例

java单例枚举Brian Goetz在消息“ 增强枚举-用例 ”中写道&#xff1a;“我们希望就现在实现的功能[ 增强枚举 ]获得用户反馈。” 他陈述了他的消息的第一个目的&#xff1a;“开始工作&#xff0c;这是一些通用枚举可能有用的典型用例。” 所提供的两个示例中的第一个示例是重…

爱python网_Python

一、PIL库简介1.安装PIL库PIL库是Python的第三方库&#xff0c;需要手动通过pip工具安装。可通过cmd命令&#xff1a;pip install pillow 进行安装。(注意&#xff1a;出现pip不是内部处理命令时需要配置一下环境)。2.PIL库的功能PIL库支持图像存储、显示和处理&#xff0c;它…

python计算互信息_互信息公式及概述

在概率论和信息论中&#xff0c;两个随机变量的互信息(Mutual Information&#xff0c;简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数&#xff0c;互信息并不局限于实值随机变量&#xff0c;它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分…

队列和消息队列_消息队列概述[幻灯片]

队列和消息队列昨天&#xff0c;我进行了一次演讲&#xff0c;探讨了使用消息队列的所有方面。 我以前曾写过“您可能不需要消息队列” –现在的结论有些细微差别&#xff0c;但我仍然坚持简单性的观点。 演讲探讨了使用消息队列的各种好处和用例&#xff0c;并讨论了典型“消…

反码、原码、补码的观点阐述

我自己是不认可所谓的原码、反码的说法&#xff0c;但是很多人在计算负数的二进制时&#xff0c;都会使用反码和原码的概念&#xff0c;我这里就简单梳理下吧。 十进制2的二进制数&#xff08;按8位的二进制举例&#xff09;如下&#xff1a; 原码&#xff1a;0000 0010 补码&…

aspose word 获取标题_Word干货|多级标题的自动编号怎么添加?

在对Word文档进行排版时&#xff0c;大家普遍认为的一个难点就是对多级标题添加自动编号&#xff0c;本期Word妹与大家分享相关技巧的使用。1、添加样式选中文本&#xff0c;点击开始——样式——选择标题1&#xff0c;相同的样式则可以借用F4来实现。PS&#xff1a;以同样方式…

python使用elasticsearch_python中使用ElasticSearch(二)

一、数据库和elasticsearch的对比分析二、kibana中常用的命令。1.新建数据。2.查询上一步中存进去的数据。3.put修改字段(这个操作要小心&#xff0c;容易误操作&#xff0c;清楚其他的字段)4.post修改字段5.查询的基本操作。(1)全部查询(类似于select * from fruit)(2)有条件的…

vue.jsr入门_JSR 365更新:深入CDI 2.0

vue.jsr入门上下文和依赖注入2.0&#xff08; JSR 365 &#xff09;是CDI 1.2的更新&#xff0c;CDI 1.2目前是Java EE 7平台的一部分。 目前处于公开审查阶段 。 对于不熟悉CDI的那些人&#xff0c;它定义了一组功能强大的免费服务&#xff0c;这些服务可充当凝胶&#xff0c;…

Java集合类梳理

文章目录集合框架CollectionListList常用方法ArrayListArrayList常用方法LinkedListLinkedList常用方法VectorVector 常用方法StackStack 常用方法SetHashSetHashSet 常用方法LinkedHashSetLinkedHashSet 常用方法TreeSetTreeSet常用方法EnumSetEnumSet 常用方法MapHashMapHash…

增加第三方插件_AE插件排行!!

大家好是万能的懒懒酱After effects为视觉效果艺术家和动画设计师带来了大量的效果。然而&#xff0c;第三方开发人员提供了更多独特插件&#xff0c;供After Effects使用。在这里可以帮助你了解哪些插件是最流行的最受欢迎的。第10名&#xff1a;Looks&#xff08;多功能调色插…