Servletでの設定ファイルの置き場所

Servletで使用するライブラリ等の設定ファイル「XXXX.properties」などの置き場所には、どうも大きく分けて2種類の場所があるようで、戸惑いがちです。


無理やり簡単にまとめると、1つは「/WEB-INF」でServlet関連の設定ファイルを置くことが多いようです、もう1つは「/WEB-INF/classes」で汎用ライブラリなどの設定ファイルを置く事が多いようです。


/WEB-INFに置く設定ファイル

  • web.xml
  • struts-config.xml
  • velocity.properties
  • などなど、、、


これらは、ウエブ・アプリケーション(ServletContext?)のルート・ディレクトリからパスを指定してファイルにアクセスしている場合で、ルートに置くとブラウザから見えちゃうので、/WEB-INFに置いているのでしょう。


ちなみにJavaプログラムからファイルの絶対パスを取るためには、例えば、、、

ServletContext.getRealPath("WEB-INF/web.xml");

などとやると、「/WEB-INF/web.xml」の絶対パスが取得できます。


/WEB-INF/classesに置く設定ファイル

  • commons-logging.properties
  • log4j.properties
  • hibernate.properties
  • などなど、、、


これらは、java.util.ResourceBundle等を使用してリソース中から置き場所を探している場合です。


リソースとは、CLASSPATHに入っている全てのコードやファイルを対象にした場所の指定方法で、設定ファイルをjarファイルの中に置くことまでもできます。Servletの場合には「/WEB-INF/classes」がCLASSPATHに入っているので、例えばJavaプログラムから、、、

ResourceBundle.getBundle("log4j");

とすると、「/WEB-INF/classes/log4j.properties」が取得できます。(注:ResourceBundle.getBundle()の場合、引数のファイル名からは「.properties」は外す必要がある。)


このリソースには各国語化したリソースを別ファイルにして、自動的に切り替えたりする機能もあります。