2010-01-11 144 views
1

我開發了一個Java EE應用程序。tomcat中的Java EE應用程序

現在說sample.war是文件。當我們將這個端口移植到Tomcat webapps時,它將爆炸到示例文件夾。但是如果我們想爲兩個人運行這個應用程序,我們該怎麼做?有些東西,如http://address.com/user1/http://address.com/user2/,在這個我們有不同的CSS(只有外觀不同)

或者我們可以採取兩個子域,並鏈接到不同風格的同一個應用程序?

回答

1

可能的解決方案:

  1. 在部署描述符(web.xml),您可以設置部署目標名稱(默認是將.war名)。

  2. 重命名的.war(user1.war user2.war)和部署它兩次。

照顧你的連接(數據庫/文件...),這些應用程序使用它們。

+0

所以你告訴我包含兩個客戶端的兩個部署行,並相應地重命名war文件。所以當應用程序到來時它可以被兩個客戶端訪問,對吧?如果還有這些網址或子網域,可以嗎?什麼是最好的選擇?! – user237865 2010-01-11 09:27:38

+0

有很多不同的解決方案!您可以使用URL重寫來處理子域。部署完成後,該應用程序可供兩個客戶端使用。他們使用相同的數據庫連接嗎?你部署什麼樣的應用程序以及處理什麼樣的數據?也許你必須做更多的事情來提供多客戶端功能。您可以更容易地處理URL(請參閱JEE starndard。) – 2010-01-11 09:35:17

0

由於上下文是在web應用文件夾下的路徑,你可以爆炸的戰爭,那麼構建要創建的,根據需要替換不同的CSS文件,每個實例的符號鏈接。兩個副本也可以工作,但您需要修改不同的實例,如果您要編輯多個實例,這可能很困難。

+0

如果符號鏈接正在工作取決於平臺和應用程序服務器實現 – 2010-01-11 09:31:40

+0

我已經測試了它可以在centos5/tomcat上使用一些配置。 – futureelite7 2010-01-11 09:44:40

0

這將不能很好地擴展到數百個用戶和1000個。

總的想法是,你的頁面具有動態能力的某一水平。閱讀JSP作爲一個可能的應用程序。 HTML的位是在運行時生成的,其中一個位可能是根據用戶的id或從db中檢索的偏好來選擇特定的樣式表。

0

如果樣式是您爲每個用戶唯一的變化,我建議你在尋找春天的方式處理在其網站MVC層皮膚。要麼使用Spring,要麼設計類似的東西來實現這一點。您將使用過濾器或控制器將用戶重新路由到使用不同CSS文件的URL。

0

如果你真的想兩次在兩個「上下文路徑」上部署相同的應用程序(不知道你是什麼意思的兩個人,但這是你在示例網址顯示),但與不同的L & F,並用自己的一套CSS部署兩個戰爭,即sample1.war和sample2.war。我可以想出完全有效的理由來決定這麼做(單獨的資源管理,如數據庫池,QoS等)。

如果您使用Apache HTTPD作爲前端,您還可以創建兩個虛擬主機(例如,子域user1.example.com和user2.example.com),將動態請求(JSP和servlet )添加到Apache Tomcat,並將靜態文件(包括CSS)置於虛擬主機級別。無論你將虛擬主機映射到一個還是兩個webapp上,都取決於你的需求。正如我上面所說,有兩次部署戰爭的有效用例。

另一種選擇是使用mod_rewrite使用URL玩,然後讓你的web應用動態地挑選所需的CSS。我個人傾向於使用Web服務器作爲前端來提供靜態文件,因爲Web服務器比這個工作更適合使用servlet容器(儘管servlet容器在這方面有所改進)。但是這顯然使架構和部署過程更復雜一些。

2

你可以把你的web應用的上下文根與<Context path="/">並選擇基礎上的風格登錄用戶或PATHINFO類似的<link href="${user.name}.css">