Définissant à la fois de message d'erreur et le corps de la servlet
Je veux écrire une servlet qui sera de retour une réponse http:
HTTP/1.1 500 <short custom message>
Content-Length: ...
<longer custom message>
La raison est que je veux de programmation client pour être en mesure de traiter le message de réponse à une réponse, mais je tiens également à remplir le corps de la réponse avec une explication plus longue, de sorte qu'il est facile de frapper à l'aide d'un navigateur.
Maintenant, HttpServletResponse a un sendError(int, String) méthode qui me permet de spécifier le code d'erreur et un message. La javadoc seulement dire que le message sera intégré dans une page html, mais rien de plus sur le message de réponse http. Après l'appel de cette méthode, vous n'êtes pas autorisé à écrire quoi que ce soit d'autre à la réponse. Dans mes tests (avec jetty), le message est utilisé à la fois pour la réponse http et html du corps, ce qui serait bien avec moi, sauf que je tiens à préciser deux chaînes et je ne pense pas que le paramètre du message de réponse http est garanti grâce à une mise en œuvre différente.
Il y a aussi un setStatus(int) méthode que vous pouvez appeler avec le code, et ensuite vous pouvez écrire votre propre code html de corps. C'est très proche, sauf que vous ne pouvez pas spécifier le message de réponse http.
Enfin, il y a un setStatus(int, String) méthode qui fait exactement ce que je veux, mais c'est déconseillé en raison d'une sorte d'ambiguïté. Je suis en supposant que certains conteneurs de servlet ont écrit le message pour le corps de la réponse et de la fermeture de la réponse.
À part en utilisant la méthode dépréciée, je suis en supposant que je suis vissé ici, mais je suis curieux de savoir si quelqu'un d'autre connaît toutes les astuces?
OriginalL'auteur Jeremy Huiskamp | 2010-10-07
Vous devez vous connecter pour publier un commentaire.
Est-il une raison pourquoi vous ne devriez pas utiliser
response.setStatus(500)
pour définir le code d'état HTTP, suivie par écrit à la réponse du flux de sortie?C'est comment écrire pour le corps de la réponse" est réalisé au niveau le plus bas.
Voici un exemple:
web.xml:
Et la sortie:
Même si
response.setStatus(int, String)
est obsolète, vous doit être capable de l'utiliser pour définir l'état de la ligne de messageOriginalL'auteur matt b
Vous pouvez personnaliser les pages d'erreur en précisant l'erreur des pages spécifiques web.xml:
Dans le fichier jsp, vous pouvez utiliser les attributs de la requête pour afficher un message personnalisé et d'autres infos.
Je voulais juste dire à une mise en garde que je suis tombé à travers. Si vous essayez d'utiliser une page html au lieu d'une page jsp, le serveur n'envoie pas le bon code d'état, bien que la page d'erreur de contenu sera affiché.
OriginalL'auteur FRotthowe
Eh bien, désolé, la raison la plus évidente pour avoir un corps pour une réponse d'erreur est de montrer quelque chose de lisible par l'homme dans un navigateur lorsqu'une erreur se produit. C'est la raison pour laquelle la génération de HTML est le comportement par défaut de sendError dans la Servlet spec.
Dans mon cas, je veux quelque chose de différent, parce que je suis la création de services web, et ce béton, on ne retourne pas une réponse si tout fonctionne bien.
OriginalL'auteur Juan
À l'aide de JBoss 6 je suis venu à la conclusion que le code de réponse doit être définie une fois que vous appelez getWriter pour désactiver le Jboss page d'erreur personnalisée de réponse. Je suppose que la mise en œuvre fournit différents auteurs selon le statut de la réponse.
OriginalL'auteur Elijah
Semble que tous les Api conçu pour le réglage de la raison, de la phrase dans HTTP deviennent obsolètes à cause de cela:
RFC 7230, Protocole de Transfert Hypertexte (HTTP/1.1): la Syntaxe du Message de Routage et de, juin 2014. La Section 3.1.2:
Tomcat supprimé le support
org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER
propriété dans version 8.5.0.OriginalL'auteur Jarekczek
Si vous voulez avoir un message d'erreur personnalisé dans les en-têtes, pourquoi ne pas ajouter votre propre en-tête avec
response.addHeader(String, String)
? En combinant ceci avec matt b de la réponse pourrait faire le travail.OriginalL'auteur nash