2010-12-07 26 views
1

Je souhaite définir des en-têtes HTTP en fonction du type de réponse. Mon problème est que certaines réponses commettent leurs en-têtes avant que je puisse mettre le mien. Des suggestions sur la façon de gérer cela?Nécessité de définir les en-têtes HTTP conditionnellement sur la réponse de servlet

+2

L'exigence fonctionnelle est pas claire, donc voici juste un lien à une question connexe qui énonce plus clairement l'exigence fonctionnelle: http://stackoverflow.com/questions/2563344/how-to-add-response-headers-based- sur-content-type-getting-content-type-before-th – BalusC

Répondre

1

Une idée consiste à définir l'en-tête de réponse dans l'objet de réponse dans un filtre avant le servlet est appelé.

Un autre est de fournir à la servlet un wrapper de réponse qui empêche la réponse réelle d'être réellement validée. Cela peut entraîner la mise en mémoire tampon du corps de la réponse en mémoire.

Mais je pense que la meilleure approche est de modifier les servlets afin que ils définir les en-têtes requis.


Dois-je tampon la réponse entière en fournissant mon propre outputstream à l'emballage? Puis-je remplacer flush() ou quelque chose comme ça?

C'est à vous de décider comment vous l'implémentez. La contrainte est que l'objet wrapper de réponse doit en quelque sorte organiser que l'en-tête spécial est ajouté avant que l'écriture du corps de la réponse commence. La façon conceptuelle simple est de tamponner le corps de la réponse, mais vous pouvez également obtenir l'enveloppe de réponse à fournir un flux de sortie/auteur qui ajoute l'en-tête avant la première affleurant au flux/graveur de sortie de réponse réelle.

Je suis inquiet au sujet des problèmes de performances en mémoire tampon provoquant

Oui, bien qu'il pourrait faire, mais vous auriez besoin de regarder l'ensemble webapp afin de déterminer si cela est important.

Du point de vue de la performance, la meilleure solution est d'obtenir le servlet pour définir l'en-tête lui-même.

+0

votre deuxième approche est ce que je dois prendre. Je veux seulement changer/ajouter l'en-tête en fonction de certaines conditions, je ne saurai pas quelle servlet est terminée. Aussi, ce n'est pas dans un endroit donc 3 est également sorti. Dois-je mettre en mémoire tampon la réponse entière en fournissant mon propre outputstream à l'emballage? Puis-je remplacer flush() ou quelque chose comme ça? Je suis inquiet au sujet tamponnage causer des problèmes de performance – treefrog