Faire des Boudins envoyer 500 Erreur Interne au Serveur lorsque des exceptions obtenir jeté
Je suis en train de travailler sur un AJAX JavaScript frontend qui permet d'appeler un Java backend écrit avec Struts. Mon problème est que lorsque le backend lève une exception, le client voit encore un "200 OK" code de réponse HTTP au lieu de "500 Internal Server Error", comme on pourrait s'attendre.
C'est le déclenchement de moi jusqu'à plusieurs reprises en raison de ma 3ème partie client bibliothèque JavaScript dépend de codes d'état HTTP de déterminer si quelque chose est incorrect avec un appel AJAX, comme le plus moderne des bibliothèques habitude de le faire. Les erreurs passent inaperçues jusqu'à ce que mon code explose lorsqu'il essaie d'analyser ce qui serait normalement JSON.
Je veux vraiment éviter le piratage de mon client bibliothèque JS pour gérer harmonieusement ces erreurs. Alors, comment puis-je faire des Boudins de me donner un 500 code d'état quand il y a eu une exception non gérée dans le backend? Ne devrait-ce pas être Struts comportement par défaut?
Edit: Le code côté client n'est pas pertinent dans ce cas. Je suis besoin de fixer le serveur afin qu'il envoie le statut approprié code lorsque les exceptions non gérées arriver. Merci!
OriginalL'auteur curtisdf | 2012-03-12
Vous devez vous connecter pour publier un commentaire.
J'ai pensé à une façon de le faire. Je ne suis pas sûr si c'est la meilleure ou la plus simple, mais il fonctionne. J'ai trouvé les montants à la Exception guide de Configuration et a ajouté ce qui suit à mon
<package>
à l'intérieur destruts.xml
:Ainsi, toutes les exceptions non gérées pour être redirigé vers
/exception.jsp
. Et voici les JSP du contenu:Vous remarquerez sur la 3e ligne que j'définir manuellement le code de réponse de 500.
Cela m'a donné un nouveau problème: les exceptions n'étaient pas enregistrés. Comme suggéré dans la dite Struts guide, j'ai résolu ce problème en ajoutant ce qui suit à mon
<package>
dansstruts.xml
ainsi:Jambes de force: -1 pour la fabrication d'un tel simple et évidente caractéristique qui n'est PAS la valeur par défaut, et un autre -1 pour la fabrication de la solution de sorte obtus.
OriginalL'auteur curtisdf
Mise à jour: j'ai résolu le
<global-results>
l'article (qui était absent de la httpheader tag)J'aime votre solution mieux, mais voici une autre façon vous pourriez le faire si vous ne voulez pas gâcher w/réglage de l'en-tête de réponse dans la page jsp.
Donc, pour struts.xml:
Et pour web.xml
Cela fonctionne, mais a quelques grands inconvénients. Le conteneur de servlet est le rendu de votre page d'erreur (pas de jambes de suspension), de sorte que vous n'aurez pas accès à l'original message d'erreur ou les jambes valueStack. Enregistrement d'Exception fonctionnera toujours, cependant (si vous l'avez activée).
Que d'un côté, j'ai aussi trouver ça étonnant que struts qui rend ce si difficile. Dans tout autre cadre que j'ai eu avec le concept de retourner une page d'erreur et un code d'erreur est assez trivial à mettre en œuvre.
OriginalL'auteur NobodyMan
Les 500 Erreur Interne du Serveur est un serveur-côté d'erreur, sens le problème n'est probablement pas avec votre ordinateur ou votre connexion Internet, mais plutôt un problème avec le serveur du site web.
Il est noter à les traiter dans le côté client. Il est sur le Serveur Web (serveur HTTP) configuré dans le traitement des demandes.
OriginalL'auteur seetha
Vous navez pas mention bibliothèque JS que vous utilisez. Je suggère de lire la documentation soigneusement. Si il a une sorte de méthode de rappel, il doit avoir une
responseText
autres queresponseCode
. Chaque fois que la validation de certains exception qui se passe côté serveur, un message d'erreur trop. Il suffit de ne pas compter sur les jetant quelques exceptions près, parce que vous êtes en utilisant AJAX. Vous pouvez suivre quiresponseText
pour montrer un message comme "la validation a échoué pour cette raison, s'il vous plaît essayer à nouveau". D'accord ?Autrement jeter WebApplicationException avant que la réponse est commise:
Ici est la jar
WebApplicationException()
provoque une erreur HTTP 500 code. avez-vous essayer de lancer celui-ci ?Sur le côté serveur, je veux éviter d'avoir à insérer les blocs try/catch partout. J'ai juste besoin d'un certain type de configuration qui indique Struts, "do the Right Thing(tm) et de me donner une réponse 500 code chaque fois que vous envoyez ces stupides des Rapports de Problème."
OriginalL'auteur tusar