« 光iフレーム にアプリをインストール | トップページ | Ubuntu13.10(64bit) で Kega Fusion を使用する »

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を取得することは可能なので、いちおうファイルの中身を取得する方法は有ります。

|

« 光iフレーム にアプリをインストール | トップページ | Ubuntu13.10(64bit) で Kega Fusion を使用する »

JAVA」カテゴリの記事

Tomcat」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/54336/58104067

この記事へのトラックバック一覧です: 先月Javaのサーブレット関連でハマったこと2点:

« 光iフレーム にアプリをインストール | トップページ | Ubuntu13.10(64bit) で Kega Fusion を使用する »