JSP Error: IllegalStateException

DOMANDA:

Quando provo ad effettuare il forward o il sendRedirect di una JSP ad un'altra risorsa ottengo queste IllegalStateException:


con il forward:

java.io.IOException: Error: Attempt to clear a buffer that's already been flushed
java.lang.IllegalStateException: Error: Attempt to clear a buffer that's already been flushed

con il sendRedirect:

java.lang.IllegalStateException
   at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:438)

RISPOSTA:

Inserendo questa riga di codice all'inizio della JSP si risolve il problema:

<%@ page autoFlush="true" buffer="1094kb"%>   

Vi starete chiedendo perché. 
Bene, cerchiamo di spiegarlo brevemente.

Quando si inoltra una request ad un'altra risorsa con un forward o un sendRedirect() si ottiene una IllegalStateException qualora la response (o parte di essa) fosse già stata inviata al client.
Quindi, quando otteniamo questo errore è molto probabile che il Web Server abbia già parzialmente inviato la response HTML al client prima di effettuare la forward (o sendRedirect()).

Aumentando la grandezza del buffer impediamo un invio immediato della response al client (in pratica la pagina viene inviata solo quando il buffer si riempie o viene forzato allo svuotamento) e permettiamo un redirect prima di una scrittura di codice HTML sul client.


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java