一、項目
我的項目采用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吧,浪費時間和生命