2013-04-30 5 views
5

wewnątrz JSP Mam mały nagłówek:Kod metody ... jest przekraczającej 65535 bajty ograniczyć

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

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

... i duży html

<html> 
... 
</html> 

Gdy próbuję przeczytaj to tak, jak mam błąd "... przekracza limit 65535 bajtów". Muszę go przerwać. Od kiedy jestem nowy w Javie, nie mogę go rozwiązać. Czy możesz wskazać mi droga?

+0

Czy masz jakieś statyczne elementy na swoim JSP? – NINCOMPOOP

+0

To ilustruje ważny punkt dla projektantów języka/środowiska wykonawczego; uważają, że programy w twoim języku mogą być * wygenerowane komputerowo * (być może, jeśli twój język jest używany jako cel kompilacji). Ograniczenia, których nigdy nie dotkną ręcznie napisane programy, mogą łatwo spowodować problemy w programach generowanych komputerowo. –

+0

@Alex ale można również zaprogramować skrypty komputerowe, aby automatycznie podzielić metodę. – Antimony

Odpowiedz

2

JSP jest konwertowane na normalne źródło java serwletu, a niektóre generowane metody są zbyt duże, ponieważ istnieje limit 64 KB (w kodzie bajtowym) na długości metod.

Jeśli to możliwe, zmiana statyczna obejmuje (naprawdę osadzenie innego źródła JSP) z włączeniem dynamicznym.

Rozwiązanie (i prawdopodobnie dobry styl) również wprowadza kilka metod, w które przenosi się elementy kodu ogólnego. Na przykład, aby wygenerować wiersz tabeli HTML z <tr>:

<%@ 

    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"); 
%> 

PS: Powyższa metoda jest zbyt mała, aby zaoszczędzić dużo, zrobienie dużego kawałka i utworzenie metody , takiej jak createResultsTable, jest bardziej efektywne.

2

Pliki JSP są kompilowane do kodu serwletów, które następnie są kompilowane do rzeczywistych plików .class. Kod JSP zostanie umieszczony w jednej dużej metodzie doGet(), a jeśli plik JSP jest naprawdę duży, osiągnie limit rozmiaru metody równy 65535. Limit pochodzi z JVM specification ("Wartość elementu code_length musi być mniejsza niż 65536 ").

Powinieneś podzielić plik na kilka plików. Nie podzieliłbym go na różne metody proponowane w tym wątku, ponieważ może to uczynić logikę kodu jeszcze bardziej złożoną w tym przypadku, ale wykonaj polecenie jsp: include dla części HTML, takich jak proposed by McDowell.

Powiązane problemy