2

我正在开展一个项目,我们希望从我们的一个遗留应用程序中提取内容,但是,我们希望避免向用户显示“等待 www.somehostname.com/someproduct/...”。

我们可以轻松地添加另一个指向同一服务器的域,但我们仍然存在someproducturl 中的上下文根的问题。简单地更改上下文根不是一种选择,因为在旧版应用程序中有数百个硬编码位引用现有的上下文根。

我想做的是能够向不同的上下文根(Say /foo/bar.do)发送请求,并让它实际转到/someproduct/bar.do, (但没有重定向,所以浏览器仍然显示/foo/bar.do)。

我发现了一些执行类似操作的 URL 重写选项,但到目前为止,它们似乎都仅限于捕获/转发请求到/来自同一上下文根。

有没有处理这种事情的项目?我们正在使用 weblogic 10.3(在旧版应用程序上是 weblogic 8)。理想情况下,我们可以将其作为新应用程序的一部分托管,但如果必须,我们也可以在旧应用程序中添加一些内容。

或者,是否有一些完全不同的解决方案可以更好地工作,我们还没有想到?

更新:我应该提到,我们最初已经建议使用 apace 和 mod_rewrite 或类似的东西,但管理/托管正在对这个解决方案表示反对。:/

更新 2 更多信息:

用户能够看到旧 url/上下文根的位置与从旧应用程序加载到新应用程序的 iframe 中的页面/工作流有关。

因此,客户端可以看到的两个应用程序之间的通信实际上并没有什么特别之处,它是由浏览器处理的普通旧 HTTPS。

4

5 回答 5

2

为什么不用Apache前端 weblogic 。

这是一个非常标准的设置,还会带来许多其他优势。apache 中的 URL 重写得到了很好的支持,并且文档非常好。

不要被设置推迟,它相当简单,如有必要,您可以在同一个盒子上运行 apache。

于 2009-07-15T19:05:38.037 回答
2

我认为您应该能够使用相当简单的自定义 servlet 来做到这一点。

在高层次上,你会:

  • 将 servlet 映射到 /foo/* 之类的映射
  • 在 servlet 的实现中,只需获取请求的pathInfo,并使用它向旧站点发出请求(使用 HttpUrlConnection 或 Apache Commons 等效项)。
  • 通过管道将响应发送到客户端(可能需要进行一些处理来处理标头)。
于 2009-07-15T19:49:26.640 回答
1

使用Restlet将允许您执行此操作。可以使用重定向器对象。例如,请参见此处此处

于 2009-07-15T21:32:28.803 回答
0

客户端正在使用的 API 的更多上下文将有助于在这里提供一个可行的解决方案。您是否尝试提供与传统 Java EE 应用程序完全不同的全新 API?什么工件在为 API(Servlet、EJB、REST 服务)提供服务?

如果您拥有由不同企业应用程序提供的 API,那么我想您只需使用 Pojo 类作为旧应用程序的网关,然后可以通过新服务应用程序之外的另一个上下文根访问。此解决方案假定您知道所有旧 API 方法,并且可以将它们映射到对新 API 的调用。

对于您不必担心调用什么方法的通用解决方案。我很好奇代理方法是否真的有效。用户凭证是否也可以通过 URL 重写正确地提供给遗留系统?您是否必须为旧呼叫切换到其他用户而不是使用原始呼叫者?URL重写是否可能。不确定这是否可以在安全的环境中工作。

也许你可以在这里提供更多信息。

于 2009-07-15T19:20:39.723 回答
0

如果您改为提供 JSP 页面,则可以使用该标记来执行请求服务器端。

然后用户甚至不会知道该资源是外部的。

http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

于 2009-07-15T19:49:38.933 回答