1. 程式人生 > >JSP 頁面出現 Unable to compile class xxx 時的問題解決思路

JSP 頁面出現 Unable to compile class xxx 時的問題解決思路

最近在學習基本的 JSP 開發上傳功能時,出現了 JSP 頁面提示 Unable to compile class xxx 的錯誤。在排查問題時,發現在 IDE 中的當前 JSP 頁面程式碼中引入了 commons-fileupload 包中的幾個類,如 DiskFileItemFactory、ServletFileUpload類等。這些類並沒有提示紅字,<% page include %>也沒有問題,專案也能正常部署。

其實這個問題在我們弄清 JSP 的生命週期後就能很清楚知道問題應該在哪了,JSP 的生命週期如下:

  1. 編譯階段:servlet容器編譯servlet原始檔,生成servlet類;
  2. 初始化階段:載入與JSP對應的servlet類,建立其例項,並呼叫它的初始化方法;
  3. 執行階段:呼叫與JSP對應的servlet例項的服務方法;
  4. 銷燬階段:呼叫與JSP對應的servlet例項的銷燬方法,然後銷燬servlet例項。

當出現 Unable to compile class xxx 情況時,異常丟擲在編譯階段,此時 JSP 頁面正在被容器 Tomcat/Jetty 編譯,當容器發現找不到頁面中引入的類時,則會出現上述狀況。

此時問題基本已經清晰,問題應該出在 commons-fileupload 的 jar 包在專案中有引入,但在 tomcat 容器的 lib 中並沒有引入。去容器的 lib 資料夾下檢查,果然沒有,將 commons-fileupload 和 commons-io 兩個 jar 包放置在 tomcat 的 lib 資料夾下後,問題解決。