2013-04-30 69 views
5

裏面一個jsp我有一個小頭:方法的代碼...是超過65535個字節限制

<%@ page import="java.util.*"%> 

<% HttpSession CurrentSession = 
request.getSession(); 
... 
%> 

...和一個大的HTML

<html> 
... 
</html> 

如果我嘗試閱讀它是因爲我得到一個錯誤「...超過65535字節的限制」。我必須打破它。由於我是新來的Java我不知道如何做到這一點。請您指出我辦法?

+0

在JSP中是否有任何靜態包含? – NINCOMPOOP 2013-04-30 07:32:32

+0

這說明了語言/運行時設計者的一個重要觀點;考慮你的語言程序可能是*計算機生成的*(也許如果你的語言被用作編譯目標)。手寫程序永遠不會觸及的限制很容易導致計算機生成的程序出現問題。 – 2013-04-30 07:48:51

+0

@Alex,但也可以編寫計算機腳本來自動分割方法。 – Antimony 2013-04-30 11:50:12

回答

2

JSP被轉換成普通的Servlet Java源代碼,並且某些生成的方法太大,因爲方法長度上存在64 KB的限制(在字節代碼上)。

如果可能的話,改變static包含(真正嵌入其他JSP源代碼)和動態包含。

解決方案(也許是很好的風格)也引入了一些方法,將通用代碼塊移動到其中。例如生成具有<tr>一個HTML表格行:

<%@ 

    void tableRow(String... cellValues) { 
     %><tr><% 
      for (String cellValue : cellValues) { 
       %> <td><%= cellValue %></td> 
    <% 
      } 
     %></tr> 
    <% 
    } 
%> 

...

<% 
    tableRow("one", "unu", "un"); 
    tableRow("two", "du", "deux"); 
    tableRow("three", "tri", "trois"); 
%> 

附: 以上方法規模太小,節省很多,佔用大塊,創建方法 像createResultsTable更有效。

2

將JSP編譯爲servlet代碼,然後將其編譯爲實際的java .class文件。 JSP代碼將被放入一個大的doGet()方法中,如果您的JSP文件非常大,它將達到65535的方法大小限制。限制來自JVM specification(「code_length項的值必須小於65536" )。

您應該將文件分成幾個文件。我不會將它分解爲本線程中提出的不同方法,因爲它可以使代碼邏輯在這種情況下變得更加複雜,但爲HTML部分(如proposed by McDowell)執行jsp:include。

相關問題