我有一个 servlet,它提供存储在 blob 中的图像文件。如果找不到请求的图像,我想提供一个包含在我的 war 目录中的静态图像。我们如何做到这一点?这就是我从数据存储区提供 blob 图像的方式:
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
}
}
}
是的,我只是不确定如何从战争目录中的图像中获取图像字节,或者是否有其他方法可以做到这一点?
Thanks
其他答案推荐ClassLoader#getResourceAsStream() http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#getResourceAsStream%28java.lang.String%29期望图像位于类路径。但是,您也可以从以下位置获取图像网页内容 using ServletContext#getResourceAsStream() http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContext.html#getResourceAsStream(java.lang.String). The ServletContext
通过继承可在 servlet 中使用getServletContext() http://java.sun.com/javaee/5/docs/api/javax/servlet/GenericServlet.html#getServletContext() method.
InputStream input = getServletContext().getResourceAsStream("/img/missingphoto.jpg");
也就是说,完全读取和写入byte[]
并不是真正的内存高效。考虑通过一个小字节缓冲区(1~10KB)进行流式传输,如下所示:
input = getServletContext().getResourceAsStream(path);
output = response.getOutputStream();
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)