JSP/Servlet Web應用中.properties文件的放置與讀取


本地項目

在本地類庫中,我經常使用當前目錄來放置.properties文件,這時調用方只要引用我的jar,並且將我的.properties放在他的classpath里面即可,比如:

  1. p.load(new FileInputStream("HanLP.properties"));

這樣類似下圖的項目結構就可以跑起來:

JSP/Servlet Web項目

但是到了Web項目時,情況大不相同。在Tomcat下,classpath里只含apache-tomcat-8.0.14\bin目錄下有限的幾個jar,根本沒有目錄,更不用提當前目錄了:

  1. Using CATALINA_BASE:   "\system\tomcat\Tomcat_8_0_14_InteljSearch"
  2. Using CATALINA_HOME:   "\apache-tomcat-8.0.14"
  3. Using CATALINA_TMPDIR"\apache-tomcat-8.0.14\temp"
  4. Using JRE_HOME:        "\Java\jdk1.7.0_45"
  5. Using CLASSPATH:       "\apache-tomcat-8.0.14\bin\bootstrap.jar;\apache-tomcat-8.0.14\bin\tomcat-juli.jar"

解決方案

一般而言,有三種方案:

通過 ClassLoader#getResourceAsStream() 來加載:

  1. p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("HanLP.properties"));

此時HanLP.properties可以放在下列目錄:

Webapp/WEB-INF/lib

Webapp/WEB-INF/classes

Appserver/lib

JRE/lib

特別的,如果你正處於開發狀態,可以簡單地將HanLP.properties扔到src目錄里或者resource目錄里。提醒,如果放到src或者resource目錄里,那么每次deploy都會覆寫classes目錄下的配置文件,並且你無法使用Properties#store()來保存配置文件。


放到 web 目錄下,通過ServletContext#getResourceAsStream() 讀取。

  1. Properties properties = new Properties();
  2. properties.load(getServletContext().getResourceAsStream("/WEB-INF/filename.properties"));


用絕對路徑,通過普通的 java.io 方式讀取。

  1. Properties properties = new Properties();
  2. properties.load(new FileInputStream("/absolute/path/to/filename.properties");

不過這種方式的可移植性並不好,並不推薦。

Reference

http://stackoverflow.com/questions/2161054/where-to-place-configuration-properties-files-in-a-jsp-servlet-web-application


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM