2

Java、JSP、および Jetty を使用して Web サイトを開発しています。

<img>タグの src で渡された画像パスに問題があります。

私のデータベースには、ユーザーのイメージの Linux 絶対パスがあります。この値を取得し、「src」属性に入れます。

たとえば、次のようなパスがあります。

  • /home/website/images/image1.png

このようにすると、画像が表示されません。長い間考えた結果、OS の絶対パスへのこのようなパスを持つ Web サイトの画像を見たことがなかったため、それは当然のことであると結論付けました。

私が知る必要があるのは、私がしなければならないことですか?

Jetty の構成を変更する必要はありますか? Java でコードを実行する必要がありますか?

Googleで検索すると、さらに混乱しました。説明をお願いします。


更新 (2013 年 3 月 26 日)

この問題を処理するこの方法を見つけました:

http://balusc.blogspot.com.br/2007/04/imageservlet.html

BalusCありがとう!ははははは

4

2 に答える 2

2

実際、 は<img src>ローカル ディスク ファイル システム パスではなく、パブリック Web URL を参照する必要があります。画像は HTTP リクエストで利用できる必要があります。つまり、何らかの方法でそれらを含める必要があるのは Web サーバーではなく、それらをダウンロードする必要があるのは Web ブラウザーです。

スターターにとって最も簡単な方法は、要求パラメーターまたはパス情報に基づいて画像コンテンツをInputStreambyとして取得し、必要な HTTP 応答ヘッダーを設定した後、通常の Java IO の方法で に書き込むサーブレットを作成することです。ブラウザがそれを処理する方法を理解していること。FileInputStreamOutputStreamHttpServletResponse

たとえば、サーブレットがマップされて/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>
于 2012-05-09T02:51:28.930 に答える
0

URI で使用した単語から判断すると、リソースを一意に識別する URL ではなく、ファイル システム上のファイルへのパスを src 属性に入れているようです。

絶対パスは、ファイル システムからの絶対パスではなく、Web サーバーのルートからの絶対パスです。さらに、これらの URL リソース識別子を変更または修正して、サーバー内の別のフォルダーや動的リソースにマップすることもできます。

次に例を示します。

サーバー上のファイルへのパス:

/home/website/images/image1.png

example.com は「website」フォルダーにマップされます。

相対 URL を使用すると、おそらく次のように表示されます。

<img src="/images/image1.png" />

絶対 URL を使用するには、HTTP スキームが必要です。

<img src="http://example.com/images/image1.png" />

要約すると、クライアント側の HTML からサーバー上のリソースを識別するためにファイル パスを使用することは正しくなく、機能しません。

于 2012-05-09T02:51:18.850 に答える