2010-02-27 5 views
0

J'ai écrit un proxy de sortes dans Java (et Jetty). Quoi qu'il en soit, cela fonctionne très bien, mais parfoisJava: IOException sur écriture dans HttpServlet

... 
final OutputStream realOs = res.getOutputStream(); 
... 
InputStream is = url.openStream(); 
int i; 
while ((i = is.read(buffer)) != -1) { 
    realOs.write(buffer, 0, i); 
} 

échoue avec IOException. J'ai remarqué que cela se produit la plupart du temps avec de gros fichiers binaires, par exemple le flash et le navigateur Safari ...

Je suis perplexe ...

+3

Pouvez-vous montrer de vraies traces de pile? –

+0

Obtenez-vous l'exception sur 'read()' ou 'write()'? – skaffman

+0

Malheureusement, il n'y a aucune trace de pile. Je veux dire, j'essaie de les imprimer, mais e.getMessage() est nul et e.getStackTrace() ne retourne rien aussi – Demiurg

Répondre

2

Cela peut se produire si le navigateur est fermé (ou l'utilisateur annule la télécharger) pendant que vous écrivez toujours à la prise. Le navigateur ferme le socket, donc votre OutputStream n'a plus rien à écrire.

Malheureusement, il est difficile de dire avec certitude si c'est vraiment le cas - dans ce cas, ce n'est pas un problème - ou s'il y a quelque chose de plus insidieux.

+0

Je suis sûr que le navigateur n'a pas été fermé - dans ce cas particulier, c'est-à-dire les tests unitaires, je suis l'utilisateur – Demiurg

+0

Alors, comment exactement testez-vous cela? Que voit le client? –

+0

Comme je l'ai mentionné, vous pouvez considérer mon application comme un proxy. Le client est un navigateur normal qui voit une page Web normale, chargée via ce proxy. Le problème - parfois certains objets comme les images et flash incorporés dans la page Web ne sont pas chargés. – Demiurg

Questions connexes