GWT HTTP请求替代

由于多种原因 ,许多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

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

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

相关文章

极限中0除以常数_基本不等式中常用公式百度作业帮

1. 基本不等式中常用公式基本不等式中常用公式&#xff1a;(1)√((ab)/2)≥(ab)/2≥√ab≥2/(1/a1/b)。(当且仅当ab时&#xff0c;等号成立)(2)√(ab)≤(ab)/2。(当且仅当ab时&#xff0c;等号成立)(3)ab≥2ab。(当且仅当ab时&#xff0c;等号成立)(4)ab≤(ab)/4。(当且仅当ab时…

NOIP模拟测试24「star way to hevaen·lost my music」

star way to heaven 题解 大致尝试了一下并查集,记忆化搜索,最小生成树 最小生成树是正解,跑最小生成树然后找到最大的值 欧几里德距离最小生成树学习 prim楞跑 至于为什么跑最小生成树不是跑最大生成树,你跑最大生成树连的边可能会^%$&$%!# 感性理解手膜吧,我理解但说不清…

NOIP模拟测试25「字符串·乌鸦喝水·所陀门王的宝藏(陀螺王)」

字符串 题解 没看出catalan怎么办 dp打表啊! 考虑大力dp拿到30分好成绩!顺便收获一张表 打表发现$C_{nm}^{m}-C_{nm}^{m-1}$ 仔细观察然后发现其实就是之前的网格那个题 那么我们回顾一下网格那个题 先看最简单的nm情况 求左下角走到右上角方案数,不能经过中间那条线 考虑大力容…

stackexchange_通过Spring Social推特StackExchange –第1部分

stackexchange本文将介绍一个快速的附带项目-一个自动从各种Q&#xff06;A StackExchange网站上发布热门问题的机器人&#xff0c;例如StackOverflow &#xff0c; ServerFault &#xff0c; SuperUser等。我们将为StackExchange API构建一个简单的客户端&#xff0c;然后进行…

bandizip最后一个无广告版本_【软件来了】这是个无广告的旧版知乎

近两天有新加入粉丝团队的小伙伴在询问G先生旧版App的事情&#xff0c;文章已发过很久&#xff0c;但是知乎的旧版本还是头一次分享给大家&#xff0c;所以G先生就找到了两个版本的旧版知乎&#xff0c;知乎V3.1和知乎V3.9这两个知乎都支持在最高的系统&#xff0c;没有广告也没…

NOIP模拟测试26「嚎叫响彻在贪婪的机房·主仆见证了 Hobo 的离别·征途堆积出友情的永恒」...

题目比较神仙&#xff0c;注意是题目神仙 贪婪暗示贪心&#xff0c;堆积暗示堆优化$\%\%\%\%\%\%\%$ 两个乱搞$$一个堆优化$dp$ 嚎叫响彻在贪婪的机房 题解 对于一个序列来说只要他们差的$gcd$不为$1$就可以构成等差数列 例如 $2$ $4$ $16$ $2$与$4$差$2$ $4$与$16$差$1…

渴望订阅– RxJava常见问题解答

在教学和指导RxJava以及撰写本书之后 &#xff0c;我注意到某些领域尤其成问题。 我决定发布一些简短的提示&#xff0c;以解决最常见的陷阱。 这是第一部分。 Observable和Flowable本质上是惰性的。 这意味着无论您在Flowable放置了多么繁琐或长时间运行的逻辑&#xff0c;仅…

WPScan高级用法和定制

自定义扫描选项 WordPress作为一个广泛使用的内容管理系统&#xff08;CMS&#xff09;&#xff0c;为用户提供了丰富的自定义选项&#xff0c;使其能够根据特定需求创建个性化的网站。其中一个重要的自定义选项是自定义扫描选项&#xff0c;它允许用户对WordPress网站进行深度…

r语言中正定矩阵由于误差不正定_R语言之数据处理(一)

在上一篇小文中&#xff0c;提到了关于R语言导入数据的一些方法&#xff0c;之后的重点就转向了数据的处理上。数据处理其实在整个数据分析项目中所占用的时间是比较多的&#xff0c;所以根据处理的目的不同&#xff0c;也有不同的处理方法。在R语言中&#xff0c;我通常会将数…

【chromium】 渲染显示相关概念

DRM(Direct Rendering Manager) DRM 由两个部分组成&#xff1a;一是 Kernel 的子系统&#xff0c;这个子系统对硬件 GPU 操作进行了一层框架封装。二是提供了一个 libdrm 库&#xff0c;里面封装了一系列 API&#xff0c;用来进行图像显示。 说到这里&#xff0c;其实这么理解…

ASP.NET Core MVC 之区域(Area)

区域&#xff08;Area&#xff09;是一个 ASP.NET MVC 功能&#xff0c;用于将相关功能组织为一个单独的命名空间&#xff08;用于路由&#xff09;和文件结构&#xff08;用于视图&#xff09;。使用区域通过向控制器和操作添加 一个路由参数&#xff08;area&#xff09;来创…

esp32 arduino adc_英雄联盟手游射手出装怎么出 adc英雄出装推荐

2020-11-02 18:06:31 角色扮演 人气值&#xff1a;加载中...英雄联盟手游adc怎么出装备&#xff1f;英雄联盟手游虽然没有上线国服和台湾服&#xff0c;但是我们已经有很多热心的玩家在外服中研究出了各种射手的玩法&#xff0c;那么adc要怎么出装呢&#xff1f;小编已经准备…

camel.js_Camel 2.11 –没有Spring的Camel Web应用程序

camel.js在撰写本文时&#xff0c;我们刚刚向即将到来的Apache Camel 2.11添加了一个新组件&#xff0c;该组件允许使用Camel运行Web应用程序&#xff0c;而不必依赖Spring Framework来加速Camel。 或与此相关的任何其他第三方框架。 有点as愧地说&#xff0c;在2013年&#x…

宅男计划

题解 $dp$不行考虑三分 发现单峰 1.理性打表,得到单峰 2.感性思考,你会发现你买食物次数越多,你钱数越少,你买的好食品更多,你买食物次数越少,你钱数越多,然而你必须买一些价格贵保质期长弥补次数少. 单峰,我们三分就完了(其实也可以模拟退火,然而我参数爆炸了一直60分) 那么$c…

.net 后台 下载 图片_特殊的 “图片软件” !

01 引语简单的图片处理软件我说过不少&#xff0c;像windows自带的图片编辑、在线处理图片的稿定设计、或者ps的一些插件。虽然我知道这类工具型软件的文章&#xff0c;大多数小伙伴都只是随便看一眼&#xff0c;心里默念 “咦&#xff0c;好像有用&#xff01;”&#xff0c;…

流操作中的noException

本文介绍了一些简单的编码实践。 没什么好看的。 在StackOverflow上也进行了讨论。 您只是将一个庞大而复杂的循环重构为一个更具可读性的流表达式&#xff0c;而忘记了某些方法调用引发了异常。 包含此代码的方法将引发此异常&#xff0c;该异常在方法头中声明。 您不想在此级…

optimize table 需要多久_吉林市政工程资质新办需要多久

七。 暖通空调专业&#xff1a;水暖工程&#xff0c;建筑环境与设备&#xff0c;环境工程&#xff0c;暖通空调&#xff0c;供暖和通风与空调&#xff0c;制冷和空调&#xff0c;水暖&#xff0c;供暖和通风&#xff0c;HVAC&#xff0c;公共设备安装。如何申请第三级土木工程资…

Java EE 6 开发环境

软件安装&#xff1a; 选择 Glassfish 支持 Java EE 6 的最新版本 3.1.2.2根据 Glassfish 3.1.2 的 certification matrix&#xff0c;要求 JDK 1.6 update 29&#xff0c;因此&#xff0c;选择 JDK 6 最新版本 JDK 6u45选择 Eclipse Indigo&#xff0c;其之后的版本要求 JDK 7…

mysql连接不断线_某些小时后MySql连接自动掉线

mysql连接不断线MySql配置为删除任何闲置超过8小时的连接。 这意味着什么&#xff1f; 在8个小时的间隔后返回到已部署的应用程序之后&#xff08;如果未更改默认SQL参数&#xff09;&#xff0c;将会遇到异常情况。 如何解决这个问题&#xff1f; 增加wait_time参数-不是一个…

pb65 xp 安装无反应_长春优质AFB型耐腐蚀泵安装

长春优质AFB型耐腐蚀泵安装 k5b5b5s长春优质AFB型耐腐蚀泵安装 并及时更换轴套。而随着科技的不断发展&#xff0c;新式设备的问世&#xff0c;设备一般都开始被筛选。无密封自吸泵无密封自吸泵就是一种新式泵&#xff0c;该泵密封可靠&#xff0c;选用无泄漏密封设备&#xff…