Comment puis-je imprimer la trace de la pile d'erreur dans la page JSP?
J'ai mis ma page d'erreur comme ceci web.xml:
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/errors/error.jsp</location>
</error-page>
Maintenant, je voudrais imprimer la trace de la pile d'erreur sur les JSP (bien sûr, le mode de développement uniquement). Comment puis-je imprimer la trace de la pile d'erreur sur ma page JSP? Je n'utilise pas de cadres pour cette application, donc uniquement défaut servlet Api sont disponibles pour mon programme.
Vous devez vous connecter pour publier un commentaire.
obtenir le paramètre de la demande du client qui est mis à l'interne et à l'utiliser pour imprimer et de les traiter avec d'autres informations comme
cause
,message
et imprimer stacktrace
Voir Aussi
<%@page pageEncoding="UTF-8" isErrorPage="true" %>
dans le haut pour permettre cela.Les paramètres suivants seront établis par le conteneur lorsque la demande est transmise à la page d'erreur.
Dans votre erreur JSP ce faire,
Ou d'Autre Si votre page d'erreur est définie comme page d'Erreur avec la Directive de Page comme,
La exception variable de script sera déclaré dans la page JSP. Vous pouvez imprimer la variable de script à l'aide d'un scriptlet l'aide,
Ou,
#{requestScope['javax.servlet.error.status_code']}
.À l'aide de JSP scriptlets est un mal vue pratique depuis une dizaine d'années. Vous feriez mieux de éviter il.
Si vous êtes déjà sur EL 2.2 ou plus récent (Tomcat 7+, JBoss 6+, WildFly, GlassFish 3+, etc), avec un nouveau support pour la méthode des expressions de la forme
${instance.method()}
, alors vous pouvez simplement utiliser 100% d'EL pour cela.Abord, vous devez explicitement l'ordre de vider les JSP écrivain via
JspWriter#flush()
, de sorte que tous les précédents JSP sortie de modèle qui est vraiment écrit à l'auteur de la réponse de servlet:Alors vous pouvez simplement passer
ServletResponse#getWriter()
àThrowable#printStackTrace()
.Exemple complet:
Si vous êtes déjà sur EL 3.0 (Tomcat 8+, WildFly, GlassFish 4+, etc), vous pouvez même en faire un simple expression avec le nouvel opérateur point-virgule qui sépare EL états:
Si vous ne pouvez pas utiliser
isErrorPage="true"
pour une raison quelconque (et donc${exception}
implicite de l'objet n'est pas disponible), puis il suffit de le remplacer par${requestScope['javax.servlet.error.exception']}
:Si vous n'êtes toujours pas sur EL 2.2, alors votre meilleur pari est de créer un personnalisé EL de la fonction. Les détails peuvent être trouvés dans Quelle est la bonne approche pour transférer l'exception de servlets à une page jsp?
Ci-dessous est le plus complet d'erreur exemple de page avec plus de détails:
Peut-être cela aide à vous..
il sera afficher exception StackTrace dans le navigateur
Ou
Si vous déclarez
<% page isErrorPage="true" %>
en haut de l'erreur.jsp, vous avez accès à la levée d'une Exception (et donc aussi de l'ensemble de ses getters) par${exception}
voir plus.. La cartographie des Erreurs d'Erreur Écrans
error page
également présent sur jsp est de mauvaise qualitéSur la page d'erreur, il suffit de faire:
Bien que cela pose la question: qu'est-ce que l'utilisateur va faire une exception. Pourquoi ne pas écrire l'exception dans le journal des erreurs de sorte qu'il est conservé et vous pouvez revenir à lui après qu'un utilisateur se plaint?
Ou, pour éviter d'utiliser les scriptlets dans votre jsp, l'utilisation de jstl:
Idéalement, les scriptlets doit être rejetée en tant que meilleure pratique. Empêcher explicitement scriplets dans vous fichiers jsp via le web.xml configuration:
La levée d'une Exception objet est disponible en tant que demande de l'attribut avec le nom " javax.servlet.erreur.exception'. Donc, dans votre JSP, vous pouvez écrire:
Vous pouvez utiliser jstl bibliothèque de base
1) Importation tablib sur le dessus de fichier JSP
2) l'utilisation de la balise