私の Web アプリケーションでは、画像をアップロードして、p:graphicImage を使用して表示したいと考えています。アップロードされた画像は Web アプリの外部、特に E:\webapp\upload に保存します。Tomcat サーバーが E: ボリュームにインストールされていることに注意してください。http://balusc.blogspot.com/2007/04/imageservlet.htmlで説明されているように、画像を読み取る ImageServlet を作成しました。
次の構成を web.xml ファイルに追加しました。
<servlet>
<servlet-name>imageServlet</servlet-name>
<servlet-class>utilities.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imageServlet</servlet-name>
<url-pattern>/upload/*</url-pattern>
</servlet-mapping>
「upload/imageName.ext」を使用して index.xhtml ページから画像にアクセスできます。例:
<p:graphicImage value="upload/flag.gif" />
この jsf コードは、次の HTML コードに正しく変換されます。
<img src=”http://localhost:8080/MyApp/upload/flag.gif?pfdrid_c=true”>
ただし、サブフォルダーに含まれているページから画像にアクセスできるようにしたいと考えています。たとえば、「admin」サブフォルダーにあるページが 1 つあります。
http://localhost:8080/MyApp/admin/language.xhtml
そのページ内で、同じ jsf コードが次のように変換されます。
<img src=”http://localhost:8080/MyApp/admin/upload/flag.gif?pfdrid_c=true”>
これは間違っています。
つまり、存在しない「E:\webapp\admin\upload」ディレクトリで画像を検索するため、何も表示されません。次のコードを明確に記述できます。
<p:graphicImage value="../upload/flag.gif" />
それを機能させるには、別のサブフォルダー階層にいるたびにパスを採用する必要があるため、これは悪い習慣だと考えています (たとえば、ネストされたサブフォルダーの問題を考えてください)。
サブフォルダー階層に関係なく、画像の相対パス、たとえば「upload/flag.gif」を指定する方法があるかどうか疑問に思っています。
前もって感謝します!