現在、文字列のテキストを表示する画像を生成する必要があります。この画像をサーブレットで作成してから、何らかの方法で画像をJSPページに渡して表示できるようにする必要があります。画像の保存を避け、代わりに画像をJSPにストリーミングしようとしています。
サーブレットからJSPに画像を渡す方法を見つけ始めてから、画像を生成する方法が見つかりませんでした。
編集:jspページはすでに作成されており、サーブレットによって作成されていません。既存のjspに画像を渡す必要があります
どんな助けでも大歓迎です。
画像をバイト配列として応答の出力ストリームに書き込む必要があります。このようなもの:
byte[] imageBytes = getImageAsBytes();
response.setContentType("image/jpeg");
response.setContentLength(imageBytes.length);
response.getOutputStream().write(imageBytes);
次に、JSPでは、標準のimg
要素を使用します。
<img src="url to your servlet">
あなたできません1 異なるタイプ(たとえば、タイプtext/html
のHTMLページとタイプimage/jpeg
の画像)を返すため、同じ応答で両方を返します。
この種のことのために、私は最初のサーブレットリクエストの間に画像を生成します(それを含むHTMLページのために)。サーブレットのキャッシュに保存し、ハンドルを使用してその画像へのURLを含む画像タグを使用してHTMLページを記述します。
例えばブラウザはhttp://whatever/page
を要求します
サーブレットは画像を生成し、次のようにページにHTMLタグを書き込みます。
<img src="http://whatever/image/unique_handle_to_image">
ブラウザはHTMLページをレンダリングし、その一部として、画像のハンドルを使用してサーブレットに新しいリクエストを発行します。
例えばブラウザがhttp://whatever/image/unique_handle_to_image
を要求するようになりました
次に、画像をコンテンツタイプimage/jpeg
または同様のものとして返します。
つまり、2つのリクエストが進行中です。 1つは画像をレンダリングして一時的に保存するページ用で、もう1つは画像を返すページ用です。画像キャッシュをクリアすることを忘れないでください、しかしそれはすべて簡単です。通常、ブラウザからの2つのリクエスト(!)はすぐに連続して発生するため、大量の画像を保存する必要はありません。
ブラウザがサポートしていれば data uri を使用して、次のようなものを作成することは可能だと思います。
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==" alt="Red dot" />
これらを取り巻くいくつかの警告があることに注意してください。リンク先のページをご覧ください。
私はこれを達成するためにこの線に沿って何かをします:
JSPページで、画像へのリンクを配置します。
<imgsrc = "servlet/path?word = value">残り</ img>
このリンクはサーブレットを指し、リクエストパラメータを使用して画像を生成します。保存する必要はなく、応答の出力ストリームに直接配置するだけです。このサーブレットのブラウザキャッシュを無効にすることを忘れないでください。
最初にJSPページが表示され、次にすべての画像が要求されます。問題なく動作するはずです。
もちろん、このようなパラメータに表示するテキストを配置するべきではありません。適切に暗号化するか、HTTPセッションに保存する必要があります。
お役に立てれば。
...
response.setContentType("image/jpeg");
response.setContentLength(imageBytes.length); // imageBytes - image in bytes
response.getOutputStream().write(imageBytes);//
outStream.flush();
outStream.close();
私があなたの問題を正しく理解している場合、イベントのシーケンスは次のようになります。
したがって、imageを生成してJSPに渡すことはできません。ただし、[〜#〜] url [〜#〜]を生成して画像を取得し、それをJSPに配置することはできます。これは、サーブレットをHttpServletRequestオブジェクト(JSPのリクエストスコープ)に配置するのに十分簡単です。たとえば、次を生成します。
<a href="http://myhost.com/image_servlet?id=1234"/>
そのテキストが何であるか、または画像を生成するためにどのような情報が必要であるかを実際に言うことはありません。それをGETURLにカプセル化できない場合は、次のget imageリクエストで取得できるように、追加情報を追加してHttpSessionに配置する必要があります。