2016-04-05 72 views
2

我有一個要求寫入圖像,並且同時,狀態碼設定標頭,如位置302後無法設置響應頭與HTTP狀態302位置寫入圖像

//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狀態的位置。爲了防止刷新響應,但響應仍然被刷新。 有沒有人遇到過這種需求?請幫忙,因爲我是Jsp/Servlet的新手。

回答

2

你必須寫servlet響應之前,首先設置頭:

//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內容轉發到servlet響應流? – Vampire