终极解决方案:org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response
一、项目
我的项目采用Spring MVC +JSP+EasyUI 做的老项目。
在做图片验证码方法时,向网页输出验证码图片的方法如下:
@Override public void showCodeImg(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setHeader("Expires","-1");//控制缓存的失效日期 response.setHeader("Cache-Control","no-cache");//必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求 response.setHeader("Pragma","-1"); CaptchaUtil util=CaptchaUtil.Instance(); // 将验证码输入到session中,用来验证 String code=util.getString(); request.setCharacterEncoding("UTF-8"); request.getSession().setAttribute(SecurityCodeConstant.CODE_NUM,code); // 输出到web页面 ImageIO.write(util.getImage(), "jpg", response.getOutputStream()); }
二、出现错误:
org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response
找了网上资料:无非是说
https://blog.csdn.net/zeb_perfect/article/details/45641355
https://blog.csdn.net/xyajia/article/details/78730751
之类没用的废话。
三、最终原因:
Win10的操作系统,Tomcat 放在了C盘,权限有问题!!!!,虽然报错完全看不出跟文件权限有半毛钱关系!!
四、解决方案
把Tomcat 拿出来放D盘,再次发布项目,TMD一切正常!!!
五、经验:
别用Windows了,改用Linux吧,浪费时间和生命