終極解決方案: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吧,浪費時間和生命


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM