先月Javaのサーブレット関連でハマったこと2点
先月、Java関連の仕事でハマったこと2点を備忘録。
1、サーブレットのフィルタは、サーブレット以外のアクセスにも適用される。
Tomcatだけの問題なのかもしれないけど、サーブレットのフィルタはイメージとかCSSを取得した際にも動きます。
セッションが無い状態でTomcat上に有る画像のURLを直接指定したら、フィルタで処理しているセッションエラー画面が出てきて発覚。
Web上にはなぜか情報がほとんど無かったのだけど、良い設計では静的ファイルはTomcat上に置かず、Apacheで処理させるはずだから、問題になる事例が少ないのかもしれないけど。
2、WARファイル内のリソースにgetRealPathは使えない。
サーブレットで、サーブレットのコンテキスト配下に有るファイルを取得する際、
javax.servlet.ServletContext
java.lang.String getRealPath(java.lang.String path)
で相対パスから絶対パスを取得するのは定石だけど、これはWARファイルが展開されていないと使用できないことが判明。
APIの説明にも、
「Servlet コンテナが何かの理由 (コンテンツが .war アーカイブで提供されているなど) で仮想パスを実際のパスに変換できなかった場合には null を返します。 」
ってしっかり書かれているし。
javax.servlet.ServletContext
java.io.InputStream getResourceAsStream(java.lang.String path)
で、相対パスからファイルのInputStreamを取得することは可能なので、いちおうファイルの中身を取得する方法は有ります。
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント