问题解决。
原因在我继承了spring的controller来生成图片,却放在了jsp页面里显示它。在jsp页面中为了显示这个图片,不得不“再次”(注意,这里用了“再次”)获得outputStream,这就是问题所在了。spring在render页面的时候应该已经得到了writer和outputStream,为了显示在缓存中的图片,在jsp用response.getOutputStream()再次得到outputStream就出现了上面的错误。修改方法就是在controller里面直接输出图片,就和直接写servlet一样,直接用ImageIO.write(image, "JPEG", response.getOutputStream());输出到页面就OK了。方法返回null,即不去render任何的jsp页面,因为输出图片到页面的目的已经达到了,再去render图片已经画蛇添足了。