2013-04-30 9 views
5

All'interno di un jsp ho un piccolo colpo di testa:Il codice del metodo ... si superano i 65535 byte limitano

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

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

... e un grande html

<html> 
... 
</html> 

Se provo a leggerlo come si ottiene un errore di "... sta superando il limite di 65535 byte". Devo romperlo. Perché sono nuovo di java Non riesco a capirlo come si fa. Potresti indicarmi il modo?

+0

Si dispone di eventuali inclusioni statiche nel JSP? – NINCOMPOOP

+0

Questo illustra un punto importante per i progettisti di linguaggio/runtime; considera che i programmi nella tua lingua potrebbero essere * generati dal computer * (forse se la tua lingua è utilizzata come destinazione per la compilazione). Limiti che non saranno mai colpiti da programmi scritti a mano possono facilmente causare problemi ai programmi generati dal computer. –

+0

@Alex ma è possibile programmare anche gli script per dividere automaticamente il metodo. – Antimony

risposta

2

Il JSP viene convertito in una normale sorgente java Servlet e alcuni metodi generati sono troppo grandi, in quanto vi è un limite di 64 KB (sul codice byte) sulle lunghezze del metodo.

Se possibile, la modifica statica include (incorporando realmente un'altra sorgente JSP) con include dinamici.

La soluzione (e probabilmente un buon stile) introduce anche un paio di metodi in cui vengono spostati i pezzi del codice generale. Per esempio per generare una riga di tabella HTML con <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"); 
%> 

P.S. Il metodo precedente è troppo piccolo per risparmiare molto, prendere un pezzo grande e creare un metodo come createResultsTable è più efficace.

2

I JSP vengono compilati in un codice servlet, che viene quindi compilato in file java .class effettivi. Il codice JSP verrà inserito in un unico grande metodo doGet(), e se il tuo file JSP è molto grande, raggiungerà il limite di dimensioni del metodo di 65535. Il limite arriverà da JVM specification ("Il valore dell'elemento code_length deve essere inferiore a 65536").

È necessario dividere il file in diversi file. Non lo dividerei in metodi diversi come proposto in questo thread, dal momento che può rendere la logica del codice ancora più complessa in questo caso, ma fare un jsp: include per le parti HTML come proposed by McDowell.

Problemi correlati