Action 中 Response already committed 解决办法

来源:互联网 发布:网络转换器网通转电信 编辑:程序博客网 时间:2024/05/10 06:43
在一个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());

从而导致该问题



原创粉丝点击