Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

servletでテキストファイルを読込む

servletでテキストファイルをWEB-INF直下に置いたテキストファイルを読込む方法について質問です。

テキストファイル(URIを元に表示するViewの設定が書かれている)を読込むクラスにファイル名を渡して、ファイルを読込み、内容をマップするプログラムを作ろうと考えています。

前提として、リクエスト、レスポンスは渡しません。ですので、ServletContextなどから、リアルパスの取得はできません。
絶対パスも不可です。環境が変わると修正が必要になるので。(ただ最悪、DIで絶対パス渡して、とりあえずソースをいじらないですむ様になればとは思いますが)

この条件でテキストファイルを読込むには、どうしたらいいでしょうか。あるいは、アプリケーションフォルダ内のどこどこにおいて、こんな相対パスで参照できるなどは無いでしょうか。

初心者のため、うまく説明できず申し訳ありませんが、よろしければ、教えてください。
よろしくお願いします。

5

回答

3676

閲覧

5件の回答

評価

0

呼び出し元でServletContextからパス取ってきて、それを渡せばいいんじゃないかな

評価

0

>呼び出し元でServletContextからパス取ってきて、それを渡せばいいんじゃないかな
GenricServlet#getServletContext ってこと?

評価

0

返信が遅くなってすみません。

あれからいろいろ試してみた結果、
HttpServletを継承したオブジェクトにビューの
設定をラッパーするオブジェクトを持たせて、
ServletContextのgetRealPath(String)で
ファイルパスを取得し、ラッパーに渡して
読み込みをすことで一応解決できました。
Stringの渡し方は、web.xmlのinit-paramか、
ラッパーにDIで突っ込んでおき、アクセさをつくって
受け取るか使用と思います。

ついでに、相対参照と絶対参照の話ですが、
絶対参照は問題なしです、てあたりまえですが。
相対参照は、カレントディレクトリがTomcatの
インストール先になるらしく、./webapps/サーブれっと名/WEB-INF/〜で参照できました。
Linuxでも試してみたところ、カレントディレクトリが/home/〜とTomcatとは全然違う場所でしたので、絶対参照にしました。

ソースがすっきりするDIでパスを渡すのと、
Servletの仕様に依存するServletContextのメソッドから
取得するのでは、どちらがいいのでしょうかね。
作成者の好みと言う感じかもしれませんが、
なにかこっちのほうが良いということがありましたら教えてください。

評価

30

Servletからコンテキストパスを取得する方法以外、考えない方がいい。
メソッドは・・・細かいことは忘れた。
絶対パスなんぞ、ハードコーディングだろうがプロパティだろうが、使ったが最後、絶対に後悔するぞ。

評価

0

うちはjavaの引数でベースパスを渡してますよ。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。