在JSP页面中显示数据库中的图片

14年前
    今天遇到这个问题,不过在高人的帮助之下,解决了哈。下面分享一下。
    一般在数据库里面存图片保存的都是图片的路径,网上说这样容易优化,如果想在JSP页面中显示图片也好解决,网上有例子,在这儿就不啰嗦了;但也有把图片直接保存到数据库,本人就是,呵呵。
好,切入正题。
public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("image/jpeg");
  
  String id = request.getParameter("imgId");
  if(id == null) {
   return;
  }
  
  int productId = Integer.parseInt(id);
/*********通过ID可以从数据库里面找到该值,这里代码略***********/
  PrintWriter out = response.getWriter();
  byte[] buffer = pib.getProductImage();// 这里的pib是一个JavaBean的实例,方法返回的是一个byte数组,我用了Hibernate框架,所以在Oracle数据库中的CLOB对应的属性类型是byte[]
  InputStream is = new ByteArrayInputStream(buffer);
  int a = is.read();
  while(a != -1) {
   out.print((char)a);
   a = is.read();
  }
  out.flush();
  out.close();
  
 }
通过以上代码在页面中访问该Servlet能显示图片。
但是同样的代码在JSP中却显示不了,出来的是一堆乱码,显然,这不是想要的效果。但问题究竟出在哪儿,我也没去研究,经高人指点,既然能在Servlet中能正常的图片,能不能直接通过<img>标签的src属性直接访问Servlet?
经过笔者测试,可以解决问题。
以下是JSP代码:
<img src="/productImg?imgId=<jsp:getProperty property="productId" name="product"/>"><%--productId是javaBean中的属性对应数据库里面的id字段,也就是上面所说的ID,product是javaBean的实例,与上面pib属同一个类型--%>
    如果用JDBC连接数据库,以上就要分两次查询,貌似用Hibernate只查一次数据库。