2016-04-05 10 views
2

を書き込んだ後、私は、画像を書き込むための要件を持っていると同時に、ステータスコード302Iは上記と試みた画像

//Code Snippet 
    InputStream input = request.getServletContext() 
       .getResourceAsStream("/WEB-INF/a.gif"); 
    BufferedImage bi = ImageIO.read(input); 
    OutputStream out = response.getOutputStream();  
    ImageIO.write(bi, GIF_FORMAT, out); 

    response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); 
    response.setHeader("Location", redirectUrl); 

と場所としてヘッダを設定HTTPステータス302と位置としてレスポンスヘッダを設定できませんコードがすべて無駄になります。 HTTP 302ステータスでロケーションを設定できません。応答のフラッシュを防ぎますが、応答はまだフラッシュされています。 誰かがこの種の要件に遭遇しましたか?Jsp/Servletの新機能として助けてください。

答えて

2

あなたが応答をサーブレットに書き込む前に最初のヘッダーを設定する必要があります:あなたが設定したいヘッダを知るまで

//Set headers 
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); 
response.setHeader("Location", redirectUrl); 

//Write response 
InputStream input = request.getServletContext() 
      .getResourceAsStream("/WEB-INF/a.gif"); 
BufferedImage bi = ImageIO.read(input); 
OutputStream out = response.getOutputStream();  
ImageIO.write(bi, GIF_FORMAT, out); 
+0

私はすでに上記の提案を試みましたが、これを実行するとストリームに書き込みができなくなり、応答がフラッシュされます –

+0

これは少し間違っています。別のサイトにリダイレクトを送信していて、画像を表示する予定です。あなたは画像で応答し、ブラウザ側ではJavaScriptによってリダイレクトを設定します。 – user987339

0

遅延は、出力ストリームへの書き込みやByteArrayOutputStreamでそれを駐車または類似。コンテンツを書き込む前にヘッダーを設定する必要があります。そうしないと、ヘッダーは機能しません。

+0

ByteArrayOutputStreamを使って問題を解決しようとしましたが、まだ画像を書いていませんでした。代わりに、ヘッダとステータスを302に設定できるようになりました。ありがとう:) –

+0

あなたはヘッダーを設定した場合、イメージを送信しないという意味ですか?あなたがリダイレクトを送信すると、それはおそらく大丈夫です。ヘッダーを送信していない場合にイメージを送信しないことを意味する場合は、ヘッダーを設定するかどうかを決定した後、ByteArrayOutputStreamの内容をサーブレットの応答ストリームに転送しましたか? – Vampire

関連する問題