2016-04-05 34 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