2013-10-01 84 views
1

我一直在研究當前要部署到多種環境的應用程序。但是,我們在部署到特定環境時遇到了上下文路徑問題。這是一個在Tomcat 6上運行的Java/Spring應用程序。部署過程由系統管理員處理,所以我沒有太多的可視性,所以我試圖想出一些處理場景的方法。對於所有URLS,我們在request.getContextPath()之前加上它們。在正常情況下,這工作正常。例如,如果戰爭的文件名site1.war,它被部署到Java - 管理上下文路徑

/site1/

不過,我們有幾個其他環境的凡戰部署和它所包含的應用程序根目錄外的ROOTPATH所以它結束了

/otherroot/site1/

所以應用程序的根路徑是/site1/,並不知道有這等ROOTPATH /otherroot/的。在這種情況下,調用getContextPath()返回/site1/,實際上我們需要的路徑是/otherroot/site1/

現在,讓我困惑的一件事是,在定義圖像(圖像,樣式表或JavaScript文件)時,當我們在JSF頁面中使用#{request.contextpath}時,URL在查看源代碼時是正確的。例如,給定/otherroot/site/網址,如果我設置

<img src="#{request.contextPath}/image1.png"/>,當我查看呈現頁面的源代碼時,我看到/otherroot/site1/image1.png。現在,如果我在每次渲染頁面時設置一些JS變量來保存上下文路徑,我會得到不同的結果。例如,

<script> 
    APP.ROOT_PATH = '#{request.contextPath}'; 
</script> 

這使得如下:

APP.ROOT_PATH = '/site1'

這會引起一些問題,因爲我們使用的異步請求的,所以我們使用url正確地從客戶端請求數據。

所以我的問題是,編寫一個可以在任何給定路徑下運行的應用程序的最佳策略是什麼?

+0

您可以編寫自定義標籤! –

回答

1

您可以通過使用可爲您識別環境的攔截器來實現此目的。您可以通過模型將環境路徑傳遞給UI,以供UI使用。 例如。 /otherroot/site1/,在此site1是上下文名稱,otherrrot是環境。

當yo命中你的服務器來渲染一個jsp時,攔截器會分析這個url並且知道url與otherroot1有關。這種環境和相關數據可以在模型中設置,可用於獲取js,圖像等以及任何其他ajax調用。

頁面呈現後,不需要依賴url上下文路徑。