サーブレットが実行されたとき,ローカルのファイルを読み込む方法が分からない

サーブレット実行時にファイルを読み込みたいのだけれども…


例えばeclipse上のtomcatで動かしてる場合

この方法でパスを取得してみる

System.out.println(System.getProperty("user.dir"));
c:\eclipse

どうやらプロジェクト内で実行されてるんじゃなくて、eclipseで実行されてるらしい


プロジェクトの中に突っ込んだファイルを指定したいんだけど、もしwarファイルにして配備したときにどうやってファイルのパスを指定したらいいんだろう?環境変数がいるのかな…


解決策

ServletContextを使えばいいらしい

ServletContext context = this.getServletContext();
String path = sc.getRealPath("files.txt");

サーバ上のURLをローカルファイルのアドレスにマッピングしてくれる。


WEB-INFのなかも覗ける

ServletContext context = this.getServletContext();
String path = sc.getRealPath("WEB-INF/files.txt");


ちなみにDWRの場合はWebContextがServletContext持ってるからこんな風にする

WebContext wctx = WebContextFactory.get();
ServletConfig scfg = wctx.getServletConfig();
ServletContext sc = scfg.getServletContext();
String path = sc.getRealPath("files.txt");