我有一个简单的(Servlet,JSP和JSTL)Web应用程序,其主要功能是显示从后端服务器检索的图像。控制器servlet将用户转发给JSP,然后JSP使用另一个Servlet在相同的JSP上显示结果图像。再往下,在JSP具有类似于行:如何处理来自图像生成Servlet的异常?
<a href="<c:out value='${imageURL}'/>"><img src="<c:out value='${imageURL}'/>" alt="image view" border="1"></a>
其中调用了图像生成的servlet使其产生图像的GET请求。
我的问题是:如何处理由此图像生成servlet引发的异常?
我已经定义了一个错误页面(在web.xml中)来处理我的web应用程序中的ServletException,但这不适用于此图像生成Servlet,并导致在我的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
在这种情况下我的追求是什么?
我希望能够处理从此图像生成Servlet抛出的异常,并在主UI上显示一些错误或将用户转发到另一个错误页面。
感谢您的解释 - 现在有道理!我希望能够流传一个罐头404.gif图像;问题在于我的图像Servlet可能会返回GIF,PNG,TIFF或PDF - 因此,只有一种类型的异常会生成很多图像 - 商业逻辑在生成图像时可能会抛出三种异常中的任何一种。 我喜欢你的想法,不写任何东西到响应,直到我100%确定业务逻辑没有抛出异常。 – ssahmed555 2010-05-17 19:18:32
只需根据图像扩展名设置“Content-Type”标头即可。你可以为'404.gif'修复它,或者使用'getServletContext()。getMimeType(filename)'来做这件事。您可以从[本文](http://balusc.blogspot.com/2007/04/imageservlet.html)中获得一些想法。 – BalusC 2010-05-17 19:19:30