実際、 は<img src>
ローカル ディスク ファイル システム パスではなく、パブリック Web URL を参照する必要があります。画像は HTTP リクエストで利用できる必要があります。つまり、何らかの方法でそれらを含める必要があるのは Web サーバーではなく、それらをダウンロードする必要があるのは Web ブラウザーです。
スターターにとって最も簡単な方法は、要求パラメーターまたはパス情報に基づいて画像コンテンツをInputStream
byとして取得し、必要な HTTP 応答ヘッダーを設定した後、通常の Java IO の方法で に書き込むサーブレットを作成することです。ブラウザがそれを処理する方法を理解していること。FileInputStream
OutputStream
HttpServletResponse
たとえば、サーブレットがマップされて/images/*
いて、画像をhttp://example.com/contextpath/images/image1.pngとして開いたとします。
String filename = request.getPathInfo();
File file = new File("/home/website/images", filename);
response.setHeader("Content-Type", getServletContext().getMimeType(filename));
response.setHeader("Content-Length", String.valueOf(file.length()));
InputStream input = new FileInputStream(file);
OutputStream output = response.getOutputStream();
// Stream bytes the usual way.
/home/website/images
別の方法は、新しい Web アプリケーション コンテキストとして、コンテキスト パスを使用してサーバーに追加することです/images
。このようにして、イメージはhttp://example.com/images/image1.pngで利用可能になります。それを構成する方法と、それを完全に管理者が制御できるかどうかに依存するのは、servletcontainer の make/version だけです。Jetty の場合、プログラムで管理している場合は次のようになります。
server.setHandler(new WebAppContext("/home/webapp/images", "/images"));
または、XML で管理している場合:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="resourceBase">/home/website/images</Set>
<Set name="contextPath">/images</Set>
</Configure>