J'ai une application web simple (Servlet, JSP, et JSTL) dont la fonctionnalité principale est l'affichage des images récupérées à partir d'un serveur principal. La servlet du contrôleur transfère l'utilisateur à une JSP qui à son tour utilise une autre servlet pour afficher l'image résultante sur cette même JSP. Plus bas, la JSP a une ligne semblable à:Comment gérer les exceptions d'une servlet générant des images?
<a href="<c:out value='${imageURL}'/>"><img src="<c:out value='${imageURL}'/>" alt="image view" border="1"></a>
qui invoque une requête GET sur la servlet-génération d'image amenant à générer l'image.
Ma question est: comment gérer les exceptions émises par ce servlet générant des images? J'ai déjà une page d'erreur définie (dans web.xml) pour gérer ServletException dans mon application Web, mais cela ne fonctionne pas pour ce servlet générant des images, et les erreurs suivantes apparaissent dans mes journaux de serveur Tomcat :
SEVERE: Exception Processing ErrorPage[exceptionType=javax.servlet.ServletException, location=/WEB-INF/ExceptionPage.jsp]
java.lang.IllegalStateException: Cannot reset buffer after response has been committed
Quel est mon recours dans cette situation? J'aimerais pouvoir gérer les exceptions générées par ce servlet générant des images et afficher une erreur sur l'interface utilisateur principale ou rediriger l'utilisateur vers une autre page d'erreur.
Merci pour l'explication - c'est logique maintenant! J'aimerais pouvoir diffuser une image 404.gif en conserve; Le problème est que mon Servlet d'image peut renvoyer un fichier GIF, PNG, TIFF ou PDF - ce qui fait que quelques images conservées pour un seul type d'exception - la logique métier peut déclencher l'une des trois exceptions lors de la génération d'une image. J'aime votre idée de ne rien écrire à la réponse jusqu'à ce que je suis sûr à 100% que la logique métier n'a pas jeté une exception. – ssahmed555
Réglez simplement l'en-tête 'Content-Type' en fonction de l'extension de l'image. Vous pouvez soit le réparer pour le '404.gif' ou simplement utiliser 'getServletContext(). GetMimeType (filename)' pour cela. Vous pouvez obtenir quelques idées sur [cet article] (http://balusc.blogspot.com/2007/04/imageservlet.html). – BalusC