« 2013年6月 | トップページ | 2013年11月 »

2013年9月

2013/09/01

先月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)

« 2013年6月 | トップページ | 2013年11月 »