2012-03-29 30 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