【问题标题】:Jersey: How to redirect/forward WITHOUT URL changing in address bar泽西岛:如何在地址栏中不更改 URL 的情况下重定向/转发
【发布时间】:2014-09-03 00:38:08
【问题描述】:

我正在使用 Jerysey 的 JAX-RS 实现来编写 REST API。我处理 get 请求的 POJO 最终将其转发给 JSP。一切正常,问题是转发导致浏览器地址栏中的 URL 更改为请求转发到的 URL。如何在地址栏中不更改此 URL 的情况下进行重定向?目前,我尝试了 4 种不同的方法:

返回 Response.seeOther(uri).build(),

返回 Response.temporaryRedirect(uri),

//抛出异常: 抛出新的 WebApplicationException(响应),

返回Response.status(303).location(uri).build();

【问题讨论】:

    标签: java rest redirect jersey jax-rs


    【解决方案1】:

    这听起来不像是泽西岛问题本身。 Jersey 正在尽其所能接收请求、进行一些处理并返回您期望的响应。

    这听起来更像是一个 servlet 容器问题。为什么不希望在浏览器中更改 url?

    可以(并且应该)构建 Restful 服务,而不用担心模板/JSP/消费者。看看像 RestAssured 这样的库,为你的工作编写一些测试,你会发现它的行为符合预期。

    考虑使用 rest 客户端直接向您的服务发出 http 请求,而不是渲染到 JSP。

    如果您希望 url 保持不变,请考虑使用 AJAX 库(JQuery 或其他基于 Javascript 的解决方案)进行 http 调用。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      RESTful 资源由 URL 标识。因此,如果您使用另一个 URL 重定向到另一个资源,地址栏中的 URL 应该 更改。这很好,因为你可以例如将此 URL 加入书签或通过电子邮件发送。

      这里的问题是,您是真的重定向到另一个资源,还是只想返回不同的表示形式(HTML 而不是例如 JSON)。如果是后者,您不应重定向。通过使用Jerseys Viewables,让您的资源类直接返回text/html

      【讨论】:

        【解决方案3】:

        您可以在 iFrame 中制作整个网站并将新网站加载到该框架中。它将维护页面 URL 并加载您的内容。

        http://www.w3schools.com/tags/tag_iframe.asp

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 2012-11-05
          • 2017-02-16
          • 1970-01-01
          • 2012-07-03
          相关资源
          最近更新 更多