GET DefaultRequest Transport:何时/为何扩展?

时间:2013-12-03 12:31:14

标签: java gwt callback subclass requestfactory

我已经看到了几个GWT代码摘录,开发人员扩展了DefaultRequestTransport并为其提供了自定义功能。其中一个例子是this SO question regarding authentication/login filters。但除了这个例子,我还看到了其他几个。

我的问题:什么时候&为什么有人需要扩展这个类并覆盖它的方法?(换句话说,这个类做什么,它的方法执行什么服务,为什么我需要自定义它们?)

在这个例子中,覆盖了createRequestCallback方法。根据该方法的Javadocs,它的目的是:

  

创建一个RequestCallback,将HTTP响应映射到TransportReceiver接口。

这对我来说仍然是一个神秘的解释。有人可以给我一个外行解释,说明扩展这个类并覆盖其中一个以上的方法会有什么好处吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

RequestFactory不依赖于特定的“传输”机制;它处理请求和响应的JSON表示,但它们交换和传输的方式是超出范围,并且延迟到RequestTransport

DefaultRequestTransport使用RequestBuilder给定(但可配置)的网址;因为它使用RequestBuilder,所以它只能在GWT客户端中使用(要编译为JavaScript)。还有UrlRequestTransport使用java.net.HttpURLConnection并且可以在JVM中运行的任何客户端上使用(服务器调用另一个服务器,Android应用程序,桌面Java应用程序等)< / p>

理论上(因为我从未尝试过而且从未听过其他人尝试过它),你可以制作一个使用Comet或WebSockets的RequestTransport,或者你想要的任何一种传输方式。当然,服务器端也必须进行调整(SimpleRequestProcessor可以在RequestFactoryServlet之外轻松重用;这是类似的关注点分离

返回DefaultRequestTransport:它使用RequestBuilder并提供一些可以覆盖的挂钩来自定义它的工作方式。最常见的用例是在解码JSON编码的RequestFactory响应之前拦截添加一些请求头(例如凭证)和/或所有响应以处理特定HTTP响应的所有请求(例如,拦截“未授权”响应以询问用户登录) DefaultRequestTransport作为RequestFactory API与RequestBuilder之间的适配器,createRequestCallback是负责调整响应的一半。

答案 1 :(得分:1)

在显示的示例中,他们需要扩展DefaultRequestTransport以检查所有RF服务器响应并捕获401状态(SC_UNAUTHORIZED),这意味着请求在服务器端被拒绝,因为用户没有有效会话,然后重定向用户到应用程序登录页面。

我也使用DefaultRequestTransport更改requestUrl(默认设置为gwtRequest),因此我可以根据url模式设置过滤器:例如,经过身份验证的RF服务转到{{1} }或未经过身份验证的RF服务转到/myapp/gwtRequest等。

我还有一个自定义的RequestTransport,它使用RequestBuilder和XMLHttpRequest的修改版本来监控onprogress事件,对大量请求非常有帮助。

您可以扩展它以发送用于执行CORS身份验证的自定义标头。

总之/myapp/anonymousRequest是修改RF的客户端传输层的方法。