一、项目
我的项目采用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吧,浪费时间和生命