JSP 頁面出現 Unable to compile class xxx 時的問題解決思路
阿新 • • 發佈:2018-12-31
最近在學習基本的 JSP 開發上傳功能時,出現了 JSP 頁面提示 Unable to compile class xxx 的錯誤。在排查問題時,發現在 IDE 中的當前 JSP 頁面程式碼中引入了 commons-fileupload 包中的幾個類,如 DiskFileItemFactory、ServletFileUpload類等。這些類並沒有提示紅字,<% page include %>也沒有問題,專案也能正常部署。
其實這個問題在我們弄清 JSP 的生命週期後就能很清楚知道問題應該在哪了,JSP 的生命週期如下:
- 編譯階段:servlet容器編譯servlet原始檔,生成servlet類;
- 初始化階段:載入與JSP對應的servlet類,建立其例項,並呼叫它的初始化方法;
- 執行階段:呼叫與JSP對應的servlet例項的服務方法;
- 銷燬階段:呼叫與JSP對應的servlet例項的銷燬方法,然後銷燬servlet例項。
當出現 Unable to compile class xxx 情況時,異常丟擲在編譯階段,此時 JSP 頁面正在被容器 Tomcat/Jetty 編譯,當容器發現找不到頁面中引入的類時,則會出現上述狀況。
此時問題基本已經清晰,問題應該出在 commons-fileupload 的 jar 包在專案中有引入,但在 tomcat 容器的 lib 中並沒有引入。去容器的 lib 資料夾下檢查,果然沒有,將 commons-fileupload 和 commons-io 兩個 jar 包放置在 tomcat 的 lib 資料夾下後,問題解決。