問題描述:
  執行 jsp 時,AP Server 丟出下面的錯誤訊息

An error occurred at line: (行數) in the generated java file
 The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

 
發生原因:

  這個問題是在當 JSP 轉換成 Servlet 檔案時所發生。原因要從下面三點看起:
  
  1. 當 JSP 轉換成 Servlet 檔時,會將 JSP 的內容放在 _jspService 這個方法裏。
    (在 jsp 中已宣告成方法的除外)
 
  2. 當 JSP 轉換成 Servlet 檔的過程中,會將 <%@ include %>
    指到的檔案內容一併放入 _jspService 方法中。
 
  3. Java 程式內,單一方法的內容不能超過 65535 bytes。

 
  因此,若 JSP 檔案內容過於龐大,或是用大量使用 <%@ include %> 這個靜態 include 方式來引入大量的檔案時,在轉換成 Servlet 檔時,將很有可能造成 _jspService 方法的內容超過 65535 bytes 的限制。

 
解決方式:

  若 AP Server 沒有提供避開以上問題的機制時,只能自己手動解決過於龐大的 JSP,可以依照下面列出的幾項原則:
 
  1. 若 JSP 中有大量的 Javascript 與 CSS code 時,將這些 Javascript 與 CSS code
      提出到獨立的 js 與 css 檔再引入。

  2. 將 JSP 中部份與畫面邏輯無關的 Java Code 提出成獨立的 Class 檔,再由 JSP 進行呼叫。

  3. 拆解 JSP 成多個可獨立執行的 JSP 檔,再用動態的引入方式 <jsp:include page> 引入。
 
  若是以上的原則仍無法解進單一 JSP 檔過大的問題,那就可能必需從流程面來解決了,比方說本來要用一個 JSP 來呈現所有資料,就要改成分別由多個 JSP 來呈現個別的資料。

參考資料:
  .http://www.liferay.com/web/guest/community/forums/-/message_boards/message/4152296
    (最後一則回答)
  .http://zhidao.baidu.com/question/63971913

arrow
arrow
    全站熱搜

    大笨鳥 發表在 痞客邦 留言(0) 人氣()