あなたは概念的な間違いを犯しています。何らかの方法で、生成された HTML 出力とともに画像を含めて送信するのはサーバーではありません。HTML 内の タグに<img src>
遭遇したときに、 で指定された URL で画像をダウンロードするのは Webブラウザです。<img>
そのため、サーバー固有のローカル ディスク ファイル システム パスではなく、エンドユーザーが Web ブラウザーのアドレス バーに入力する URL とまったく同じ、通常の URL である必要があります。Web ブラウザを使用しているエンドユーザーは、ローカル ディスク ファイル システムの正確なパスにそのイメージを持っていません。
最も簡単なのは、使用しているサーブレットコンテナの「仮想コンテキスト」としてフォルダーを追加することです。どちらを使用しているかは不明です。Tomcat では<Context>
、server.xml
<Context docBase="/path/to/images" path="/images" />
そしてGlassfishでは、に追加するだけalternatedocroot
ですglassfish-web.xml
<property name="alternatedocroot_1" value="from=/images/* dir=/path/to" />
詳細については、サーブレットコンテナのドキュメントを参照してください。最終的には、通常の URL でアクセスできるようにする必要があるため、たとえば次のように使用できます。
<p:graphicImage value="/images/#{image.imageName}" />
その他の方法には、PrimeFaces StreamedContent
APIの使用またはサーブレットの自作が含まれます。
以下も参照してください。