6 Stimmen

Der Code der Methode ... überschreitet das Limit von 65535 Bytes

Innerhalb einer JSP habe ich einen kleinen Header :

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

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

...und ein großes HTML

...

Wenn ich versuche, es so zu lesen, erhalte ich einen Fehler "...überschreitet das Limit von 65535 Bytes". Ich muss es aufteilen. Da ich neu in Java bin, kann ich nicht herausfinden, wie es geht. Können Sie mir bitte den Weg zeigen?

2voto

Joop Eggen Punkte 101784

Der JSP wird in eine normale Servlet-Java-Quelle umgewandelt, und einige generierte Methoden sind zu groß, da es eine Grenze von 64 KB (im Bytecode) für Methodenlängen gibt.

Wenn möglich, ersetzen Sie statische Includes (die tatsächlich eine andere JSP-Quelle einbetten) durch dynamische Includes.

Die Lösung (und wahrscheinlich guter Stil) besteht darin, einige Methoden einzuführen, in die Teile des allgemeinen Codes verschoben werden. Zum Beispiel, um eine HTML-Tabelle Reihe mit zu generieren:

<%@

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

...

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

P.S. Die obige Methode ist zu klein, um viel zu sparen. Wenn man einen großen Abschnitt nimmt und eine Methode wie createResultsTable erstellt, ist dies effektiver.

2voto

eis Punkte 48781

JSPs werden in Servlet-Code kompiliert, der dann in tatsächliche Java .class-Dateien kompiliert wird. JSP-Code wird in eine große doGet() Methode eingefügt, und wenn Ihre JSP-Datei wirklich groß ist, wird sie das Methodengrößenlimit von 65535 erreichen. Das Limit stammt aus der JVM Spezifikation ("Der Wert des code_length-Elements muss kleiner als 65536 sein.").

Sie sollten die Datei in mehrere Dateien aufteilen. Ich würde sie nicht in verschiedene Methoden aufteilen, wie in diesem Thread vorgeschlagen, da dies den Code in diesem Fall noch komplexer machen kann, sondern ein jsp:include für den HTML-Teil(e) wie von McDowell vorgeschlagen verwenden.

0voto

McDowell Punkte 105255

Die Standardaktion kann verwendet werden, um Inhalte zur Laufzeit einzuschließen - siehe einige zufällige Dokumentation.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X