,你可以把它作爲一個servlet參數。在你web.xml
,你申報你的servlet(我指的是CONFIGFILE作爲文件你希望得到一個引用):
<servlet>
<servlet-name>ConfigParser</servlet-name>
<servlet-class>foo.baar.ConfigParser</servlet-class>
<init-param>
<param-name>configFilePath</param-name>
<param-value>/path/to/the/config/file</param-value>
</init-param>
</servlet>
我想你知道哪裏有web.xml
文件是因爲你已經在使用的servlet。
然後在你的servlet中,你可以用你ServletConfig.getInitParameter("configFilePath")
來獲取配置文件的位置。例如在你的servlet:你在哪裏得到您的參考配置文件
public void init(ServletConfig config) throws ServletException {
super.init(config);
String path_to_config_file=config.getInitParameter("configFilePath");
}
容器將調用此方法與ServletConfig
。 這意味着,你不需要在eclipse中擁有該文件。採用這種方法,您不必在服務器上做任何特殊的事情,唯一需要注意的就是文件被複制並且您在web.xml
上聲明的路徑是正確的。
如果文件的位置可以動態構建,可以使用返回webapp的絕對路徑的ServletContext.getRealPath(「/」)。
--- UPDATE ---
回答到更新的問題。我不知道最佳做法是什麼,但有一個解決方法。您在tomcat主目錄中創建一個文件(conf_location.txt
),其中包含一行,包含要傳遞給servlet的文件的位置。在你的servlet,你可以訪問這個黑客的文件(假設你的戰爭是$TOMCAT_HOME/webapps/mywar.war
):
public void init() throws ServletException{
String contextPath=getServletContext().getRealPath("/");
File tomcatHome=new File(contextPath).getParentFile().getParentFile();
File configFile=new File(tomcatHome,"conf_location.txt");
try {
String config_location = new Scanner(configFile).useDelimiter("\\Z").next();
} catch (Exception e) {}
}
但不是'.war'文件的'web.xml'部分?因爲那是我聲明我的servlet的地方。我喜歡'init-param'的方式,但我希望能夠在'.war'之外設置它。這是可能的,我把它放在哪裏? –
但是你的servlet需要知道使用/解析什麼。您只需傳遞文件的引用,而不是文件本身。如果你想要包含這個文件,你可以將它放在「webapp/WEB-INF/classes」中,並且從你的servlet中可以解析爲「Dhanush Gopinath」在下面描述。我可能會誤解這個問題。 – 2014-02-11 19:53:13
傳遞引用是好的,但我該怎麼做(沒有在我的.war文件中對引用進行硬編碼)? –