2009-11-11 197 views
12

問題是: 我有一個web應用程序,此web應用程序部署到$TOMCAT_HOME/webapps/XXX目錄。 我可以達到的http://localhost:8080/XXX地址 但我想到http://localhost:8080/YYY地址的網絡應用程序。 添加以下到server.xml:Tomcat:一個web應用程序的兩個上下文路徑

<Server> 
    <Service> 
     <Engine> 
      <Host> 
       ....... 
       <Context path="/YYY" docBase="XXX"></Context> 
      </Host> 
     </Engine> 
    </Service> 
</Server> 

它幫助但是這個Tomcat啓動兩個Web環境和它引起了一些其他問題。 是否有可能爲一個Web應用程序創建一個「多個」地址?

+0

@大衛拉比諾維茨:是有這個問題,你有興趣的特定部分,因此賞金?由於Tomcat會在/ XXX和/ YYY上使用該應用程序,所以如果以這種方式進行映射。 – JoseK 2011-08-26 11:02:41

+0

難道你只是做一個JSP重定向?所以在tomcat/webapps/YYY /放置一個重定向或轉發的index.jsp目錄。 – 2011-08-30 10:47:07

+1

請問你爲什麼要這樣做? Http服務器代理重定向將是實現它的最簡單方法。 – 2014-06-10 12:03:25

回答

-3

嘗試使用crossContext屬性:

<Context path="/YYY" docBase="XXX" crossContext="true"></Context> 
+0

要清楚的是,它只能在使用'ServletContext#getContext()'訪問它時啓用返回其他上下文。然而,我不確定這個問題中的信息是如何適用的。 – BalusC 2009-11-11 17:02:23

+0

是的,你是對的。我已經仔細研究了一下,記得我對此有些困惑。對於那個很抱歉。在發佈建議之前,應該多看一點。 – Eric 2009-11-11 18:40:48

+0

-1不回答問題 – Daniel 2014-06-06 06:16:06

3

web應用的URL被assebled如下:

PROTOCOL:// DOMAIN:PORT/CONTEXT /頁面名

的解決方案具有兩個不同地址上的相同應用程序如下所示:

  1. 如果您想要(僅在協議中有所不同)(比如,在http和https之間),然後在server.xml中只有2個連接器。

  2. 如果您想要在DOMAIN名稱中有所不同,那麼這是在DNS級別上解決的。

  3. 如果你想要在上下文名稱(web應用程序名稱)上有所不同,你應該把apache放在前面(mod_proxy或mod_ajp),然後創建一個重寫規則(mod_rewrite)。假設所有從/a/*/b/*重寫爲/c/*

  4. 如果您想要區分頁面名稱,應該使用servlet映射。

把apache放在tomcat之前通過mod_proxy很容易,網上有很多資源。非常糟糕的是複製應用程序(將所有內容加載兩次)。

至於你的問題,我會建議在server.xml重複。

<Context docBase="myapp" path="/address1" reloadable="true" /> 
<Context docBase="myapp" path="/address2" reloadable="true" /> 

這是內存殺手,以及會話機制,併發性等

+0

這並不能解決問題。你只需部署兩個**不同的** webapps和**不是**。您必須使用URL重寫。 – 2013-06-20 11:11:42

+0

1個Web應用程序在2個地址的解決方案在項目符號1,2,3中。沒有一個提議意味着2個不同的webapps。您的評論要回答哪個解決方案(段落)? – 2013-07-04 11:13:24

+0

我面臨同樣的問題,第三個選項是最好的。但是,這給我帶來了另一個問題。就我而言,我的web應用程序使用摘要式身份驗證進行保護,並且在摘要中,瀏覽器發送的密碼是一些或多或少複雜的包含URI的計算出來的哈希值。瀏覽器的URI不是webapp的URI(我用mod_rewrite修改了它),所以認證失敗。如何解決這個問題的任何想法? – drublik 2014-12-01 15:00:44

相關問題