【问题标题】:Tomcat cross-service request forwarding?Tomcat跨服务请求转发?
【发布时间】:2012-04-13 14:11:33
【问题描述】:

我曾通过更新每个 webapp 的 META-INF/context.xml 以包含 crossContext="true" 来在单独的 webapps 之间转发请求。

但是,我现在有一种情况,我将 webapps 部署在同一个运行的 tomcat 中,但在完全不同的区域中。细说,在tomcat的server.xml中:

  • app1 使用名为“app1Svc”的服务和自己的连接器(以允许在单独的端口上运行),因此有自己的引擎、领域和主机。
  • app2 具有类似的设置,具有名为“app2Svc”的不同服务,具有自己的连接器等。

如果我在同一主机中运行这些 webapps,我可以通过它们的 context.xml 的 crossContext="true" 在两者之间分派请求并获取相关的 servlet 上下文以将请求转发到(根据Tomcat not able to get ServletContext of another webapp)。

但是,这是否可以在本质上必须在不同端口上运行的两个 web 应用程序之间进行调度(无需将 httpd 或类似的东西放在 tomcat 前面)?

【问题讨论】:

    标签: java tomcat servlets


    【解决方案1】:

    不是以原生方式,这可能很好。

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

    【讨论】:

    • 我想这会起作用,除了这意味着我将占用两个侦听器线程来服务一个请求,这不是非常理想的。这也会丢失已经在请求上设置的任何请求属性(我相信标准转发不是这种情况)。
    • 你能通过 RMI 暴露两个 servlet 的服务吗?如果您在本地 LAN 上,这对于服务间通信可能比完整的 HTTP 请求更有效。如果您在同一个 JVM 上,您还有其他可能性,例如 JNDI,或者 - 如果您以编程方式启动服务器 - 公开您自己的 JVM 范围的服务注册表。
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多