Javaのクラスやメソッドには、ファイルパスの指定の際にファイルシステム上のパス(物理パス)を要求します。例えば、java.io.FileReaderやFileInputStreamなどに対して、Webアプリケーション上の仮想パスを渡しても正しくパスを認識することはできません。
しかし、だからといって物理パスをハードコーディング(コード上に直接記述)してしまうのは、コードの可搬性という観点からもあまり好ましいことではありません。アプリケーションの配置場所を変えたからといって、コード中の該当個所をすべて変更しなければならないようでは、修正に手間が掛かるだけでなく、変更漏れなど人為的なミスの危険性も否定できません。
そこで、JSPではアプリケーション上の仮想パスをファイルシステム上の絶対パスに変換するためのメソッドを用意しています。それがapplication.getRealPathメソッドです。具体的な変換例をいくつか見てみましょう。なお、アプリケーションルートは「javatips」、「.jsp」ファイルはアプリケーションルート配下のサブフォルダ「sample」に配置されているものとします。
<% out.println(application.getRealPath("sample.txt")); // C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\javatips\sample.txt out.println(application.getRealPath("/sample.txt")); // C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\javatips\sample.txt out.println(application.getRealPath("./sample.txt")); // C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\javatips\.\sample.txt out.println(application.getRealPath("/sample/sample.txt")); // C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\javatips\sample\sample.txt out.println(application.getRealPath("sample/sample.txt")); // C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\javatips\sample\sample.txt %>
以上の結果から分かるように、application.getRealPathメソッドは、パスの先頭が「/」で始まるか、それ以外の文字で始まるかということをまったく考慮しません。この仕様は、一般的なファイルシステム上のパス記法に慣れている方にとっては、少々違和感を持たれるところかもしれません。
application.getRealPathメソッドは、あくまでもアプリケーションルートのファイルシステム上の位置を、指定された引数値に付加するだけのもので、「.」や「..」のような相対的なパス表記も解釈してくれないので、利用する際は注意してください。
Copyright © ITmedia, Inc. All Rights Reserved.