I have a servlet which serves an image file which was stored in a blob. If the requested image can't be found, I'd like to server a static image I have included in my war directory. How do we do this? This is how I'm serving the blob images from the datastore:
public class ServletImg extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
MyImgWrapper obj = PMF.get().getPersistenceManager().
getObjectById(MyImgWrapper.class, 'xyz');
if (obj != null) {
resp.getOutputStream().write(obj.getBlob().getBytes());
resp.getOutputStream().flush();
}
else {
// Here I'd like to serve an image from my war file.
/war/img/missingphoto.jpg
}
}
}
yeah I'm just not sure how to get the image bytes from the image in my war dir, or if there's some other way to do it?
Thanks
I suggest you use the class loader to retrieve the file.
Follow Haveacafe's tutorial.
2nd result for Google:
java war file resource
.Better way at this case will be simply return http redirect (status 301) to URL of this image.
The other answers recommending
ClassLoader#getResourceAsStream()
are expecting that the image is located in the classpath. You can however also obtain the image from the webcontent usingServletContext#getResourceAsStream()
. TheServletContext
is available in servlets by the inheritedgetServletContext()
method.That said, reading and writing fully into/from a
byte[]
is not really memory efficient. Consider streaming through a small byte buffer (1~10KB) like so: