2012-03-29 195 views
0

我已经有经验,通过更新每个webapp的META-INF/context.xml以包含crossContext =“true”,在单独的webapps之间转发请求。Tomcat跨服务请求转发?

但是,我现在有一种情况,现在我在同一个运行的tomcat中部署了webapps,但是在完全独立的区域中。为了详细说明,在Tomcat中的server.xml:

  • APP1使用服务名称为“app1Svc”有自己的连接器(允许在不同端口上运行),等于是自己的发动机,领域和主机。
  • APP2也有类似的设置,与名为“app2Svc”有自己的连接器一distince服务等

如果我运行在同一台主机内的这些web应用,我可以通过它们的上下文派遣两个之间的请求.xml的crossContext =“true”并获取相关的servlet上下文来转发请求(根据Tomcat not able to get ServletContext of another webapp)。

但是,这是可能的两个webapps之间的派遣,基本上必须在不同的端口上运行(没有把httpd或somesuch放在tomcat前面)?

回答

0

不以本地方式,这可能是好的。

您可以通过从一个到另一个生成http请求来访问。为此,您需要每个人都通过http(可能是RESTfully)公开一些功能。为了提出请求,您可以使用apache http组件,或者简单地使用URL.openConnection()。您只需将其他应用程序的URL(+端口)提供给应用程序,以便他们可以进行调用。

+0

我想这会工作,除了这意味着我会有两个侦听器线程占用服务于一个请求,这不是非常优化。这也将失去已经在请求中设置的任何请求属性(我相信这不是标准转发的情况)。 – drobert 2012-03-29 21:33:47

+0

是的,你必须手动传输一切。 – Bozho 2012-03-29 21:37:04

+0

您可以通过RMI公开两个Servlet的服务吗?如果您在本地局域网上,这对于服务器间通信可能比完全成熟的HTTP请求更有效。如果您使用的是同一个JVM,那么您还有其他的可能性,例如JNDI,或者 - 如果您以编程方式启动服务器 - 向您公开自己的JVM范围的服务注册表。 – 2012-03-30 06:10:56