2014-11-01 35 views
0

我想在我的網站上提供上傳功能。我無法將上傳的圖像保存在戰爭中。我可以將它保存到我的機器上的某個特定位置,並從那裏引用它。 問題是我必須使這些代碼兼容Windows機器,Mac和Openshift服務器。所以圖像文件夾的路徑在不同的機器上會有所不同。在Tomcat中配置常量

我在想的解決方法是以某種方式在不同的機器上配置tomcat服務器中的圖像文件夾位置,並從那裏讀取它。有沒有辦法在tomcat中配置一個變量? 也有沒有更好的解決這個問題?

回答

1

選項1

您可以在上下文配置文件中定義的環境變量。

<Context> 
    <Environment name="myapp.upload.dir" type="java.lang.String" value="/srv/app/upload" override="true" /> 
</Context> 

您可以創建一個新的上下文文件,只爲您的應用程序或將環境條目$TOMCAT_HOME/conf/context.xml在這種情況下,此屬性將是你的Tomcat實例中運行的所有應用程序訪問。 Here是關於上下文的Tomcat文檔。

要訪問的變量值,那麼你可以使用下面的代碼:

InitialContext ctx = new InitialContext(); 
String uploadDir = (String) ctx.lookup("java:comp/env/myapp.upload.dir"); 

選項2

你可以將其指定爲JVM財產$TOMCAT_HOME/bin/setenv.sh(或​​在Windows上)和檢索像這樣:

System.getProperty("myapp.upload.dir"); 

我個人認爲,第一個解決方案n更清潔。

另外,作爲最後一點,我不會將此解決方案視爲解決方法。在某種配置文件中指定諸如上傳目錄之類的東西是完全可接受的解決方案,而不是具有適用於所有平臺但無法更改的固定位置(例如像$HOME/app/upload)。

+0

我喜歡你的第一個和第三個解決方案。在選擇第一個解決方案之前,我想嘗試第三個解決方案。你能告訴我在Windows上$ HOME的價值是什麼? – c2tarun 2014-11-01 14:24:41

+0

您可以從Java系統屬性('System.getProperty(「user.home」)')獲取該值。完整列表在這裏:http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html。它包括諸如運行應用程序平臺的文件分隔符之類的屬性,因此從理論上講,只需從這些屬性構建平臺通用路徑即可。 – 2014-11-01 14:27:01

+0

哇。非常感謝 :) – c2tarun 2014-11-01 14:27:42