Action 中 Response already committed 解决办法

在一个roundtrip中response只能被发出一次,在一些验证码、文件下载中通过httpServletResponse.getOutputStream()和requestOutputStream.write()等方法已将response发出,再return ActionForward时被认为是再发送一次,因而报错。出现这种情况的时候,后面的return将只可以返回null,这可以由httpServletResponse.iscommitted()获知。
代码如下:
public class CheckCode extends BaseAction {

	private static final long serialVersionUID = 1L;

	public String execute() throws Exception {
		String checkCode = String.valueOf(new Random().nextInt(8999)+1000);
		this.getSession().setAttribute("ImageCode", checkCode);
		CodeImage.getInstanse().getImage(this.getResponse(), checkCode);
		
		/** add by zhangWei Feb 18, 2013 4:38:15 PM Reason : 这里添加一个判断,
		 * 如果response.isCommitted()==true,返回数据会导致再次发送一次response,
		 * 导致出现:Response already committed异常,返回null解决此问题*/
		return this.getResponse().isCommitted()?null:SystemStaticConstant.SUCCESS;
	}
}

在CodeImage.getInstanse().getImage(this.getResponse(), checkCode);中有这么一行代码:

ImageIO.write(image, "JPEG", response.getOutputStream());

从而导致该问题



你可能感兴趣的:(java)