1

私の 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”&gt;

ただし、サブフォルダーに含まれているページから画像にアクセスできるようにしたいと考えています。たとえば、「admin」サブフォルダーにあるページが 1 つあります。

http://localhost:8080/MyApp/admin/language.xhtml  

そのページ内で、同じ jsf コードが次のように変換されます。

<img src=”http://localhost:8080/MyApp/admin/upload/flag.gif?pfdrid_c=true”&gt; 

これは間違っています。

つまり、存在しない「E:\webapp\admin\upload」ディレクトリで画像を検索するため、何も表示されません。次のコードを明確に記述できます。

<p:graphicImage value="../upload/flag.gif" /> 

それを機能させるには、別のサブフォルダー階層にいるたびにパスを採用する必要があるため、これは悪い習慣だと考えています (たとえば、ネストされたサブフォルダーの問題を考えてください)。

サブフォルダー階層に関係なく、画像の相対パス、たとえば「upload/flag.gif」を指定する方法があるかどうか疑問に思っています。

前もって感謝します!

4

1 に答える 1