2008-10-28 4 views
-1

J'ai le code suivant ci-dessous dans ma servlet, mais quand IE frappe la page, il renvoie une page html vierge. Si j'utilise response.getOutputStream() directement dans le constructeur StreamResult, la page se charge correctement. Qu'est-ce que je rate?GZip HttpResponse utilisant XSL Transformer

réponse est une instance de HttpServletResponse et xsl est une instance de transformateur de XSLTC TransformerFactory

response.setHeader("Content-Encoding", "gzip"); 
GZIPOutputStream gzipOut = new GZIPOutputStream(response.getOutputStream()); 
Result outputResult = new StreamResult(gzipOut); 

xsl.transform(xmlSource, outputResult); 
+0

les choses fonctionnent-elles si vous utilisez Firefox 3.x? Si ce n'est pas le cas, votre code pourrait très probablement utiliser un correctif tel que suggéré ci-dessous. – anjanb

Répondre

1

Je vais deviner que vous ne fermons pas le flux gzipOut et donc ISN ne pas envoyer les informations "pied de page".

+0

Ferme la réponse sous-jacente comme suit: resp.getOutputStream(). Close(); travail? – Adam

+0

Honnêtement, je ne sais pas. Cependant, une autre technique peut être d'appeler gzipOut.finish() car il est capable d'imprimer les CRC finaux sans fermer le flux sous-jacent. Je ne suis pas sûr si/comment GzipOutputStream détecterait que vous appelez près du flux sous-jacent, donc je soupçonne que cela aggraverait la situation. – jsight

-1

Il s'avère qu'il y a un .finish() sur ce flux qui est requis. Il est similaire à flush, mais comme il s'agit d'un appel différent, le Transformer ne sait pas comment l'utiliser.