Java Tomcat跨服务请求转发?

Java Tomcat跨服务请求转发?,java,tomcat,servlets,Java,Tomcat,Servlets,我曾经通过更新每个Web应用程序的META-INF/context.xml以包含crossContext=“true”,在不同的Web应用程序之间转发请求 然而,我现在的情况是,我在同一个运行的tomcat中部署了webapps,但部署在完全不同的区域。要详细说明,在tomcat的server.xml中: app1使用名为“app1Svc”的服务和它自己的连接器(允许在单独的端口上运行),因此它有自己的引擎、领域和主机 app2有一个类似的设置,有一个名为“app2Svc”的distince服

我曾经通过更新每个Web应用程序的META-INF/context.xml以包含crossContext=“true”,在不同的Web应用程序之间转发请求

然而,我现在的情况是,我在同一个运行的tomcat中部署了webapps,但部署在完全不同的区域。要详细说明,在tomcat的server.xml中:

  • app1使用名为“app1Svc”的服务和它自己的连接器(允许在单独的端口上运行),因此它有自己的引擎、领域和主机
  • app2有一个类似的设置,有一个名为“app2Svc”的distince服务,它有自己的连接器等
如果我在同一台主机上运行这些webapps,我可以通过它们的context.xml的crossContext=“true”在两者之间发送请求,并获取相关的servlet上下文以将请求转发到(根据)


然而,这是否可能在两个基本上必须在不同端口上运行的webapp之间进行调度(而不将httpd或类似的东西放在tomcat前面)?

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


您可以通过生成从一个到另一个的http请求来访问。为此,您需要它们中的每一个都通过http(可能是RESTfull)公开一些功能。为了发出请求,您可以使用apache http组件,或者只需
URL.openConnection()
。您只需要向应用程序提供其他应用程序的URL(+端口),这样它们就可以进行调用。

我认为这会起作用,但这意味着我会占用两个侦听器线程来服务单个请求,这不是很理想。这也会丢失已在请求上设置的任何请求属性(我相信标准转发不是这种情况)。您可以通过RMI公开这两个servlet的服务吗?如果您是本地LAN上的用户,那么这对于服务间通信来说可能比完整的HTTP请求更有效。如果您在同一个JVM上,您还可以使用其他可能性,例如JNDI,或者——如果您以编程方式启动服务器——公开您自己的JVM范围的服务注册表。