java – 通过JSP显示BLOB(image)

前端之家收集整理的这篇文章主要介绍了java – 通过JSP显示BLOB(image)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个代码显示雇员的图表.

数据(名称,电话,照片等)存储在sqlServer中并通过JSP显示.
显示数据可以,除了图像.jpg(存储在IMAGE = BLOB列中).

顺便说一下,我已经显示了图像(见下面的代码),但是我不知道如何将它放在.css中定义的区域(见下面的代码),因为图像通过resultSet被加载到浏览器的整个页面中.

有人知道我如何“画”图像?

  1. <%
  2. Connection con = FactoryConnection_sql_SERVER.getConnection("empCHART");
  3. Statement stSuper = con.createStatement();
  4. Statement stSetor = con.createStatement();
  5.  
  6. Blob image = null;
  7. byte[] imgData = null;
  8.  
  9. ResultSet RSSuper = stSuper.executeQuery("SELECT * FROM funChart WHERE dept = 'myDept'");
  10.  
  11. if (RSSuper.next()) {
  12. image = RSSuper.getBlob(12);
  13. imgData = image.getBytes(1,(int) image.length());
  14. response.setContentType("image/gif");
  15. OutputStream o = response.getOutputStream();
  16. //o.write(imgData); // even here we got the same as below.
  17. //o.flush();
  18. //o.close();
  19.  
  20. --[...]
  21.  
  22. <table style="margin: 0px; margin-top: 15px;">
  23. <tr>
  24. <td id="photo">
  25. <img title="<%=RSSuper.getString("empName").trim()%>" src="<%= o.wite(imageData); o.flush(); o.close(); %>" />
  26. </td>
  27. </td>
  28.  
  29. <td id="empData">
  30. <h3><%=RSSuper.getString("empName")%></h3>
  31. <p><%=RSSuper.getString("Position")%></p>
  32. <p>Id:<br/><%=RSSuper.getString("id")%></p>
  33. <p>Phone:<br/><%=RSSuper.getString("Phone")%></p>
  34. <p>E-Mail:<br/><%=RSSuper.getString("Email")%></p>
  35. </td>
  36. </table>

而这里是片段的图像:

  1. #photo
  2. {
  3. padding: 0px;
  4. vertical-align: middle;
  5. text-align: center;
  6. width: 170px;
  7. height: 220px;
  8. }

提前致谢 !

解决方法

你在这里犯了一些根本的错误. < img src>必须指向一个URL,不包含图像的二进制内容. JSP页面内容类型本身不应设置为image / gif.它应该保持默认为text / html.网络服务器应该按照您期望的方式将具体的图像包含在HTML结果中是不正确的.这是webbrowser根据src属性中找到的URL单独下载图像,然后相应地呈现.

最简单的是创建一个单独的servlet,将图像从数据库流传输到响应体.您可以通过请求参数或路径信息唯一标识图像.这是一个使用request参数的例子:

  1. <img src="imageServlet?id=<%=RSSuper.getString("id")%>" />

那么doGet()方法应该基本上执行这个工作:

  1. String id = request.getParameter("id");
  2.  
  3. // ...
  4.  
  5. InputStream input = resultSet.getBinaryStream("imageColumnName");
  6. OutputStream output = response.getOutputStream();
  7. response.setContentType("image/gif");
  8. // Now write input to output the usual way.

与具体问题无关,十年来,以这种方式使用scriptlet正式强烈地不鼓励.也许你正在阅读完全陈旧的书籍/教程,或者正在维护一个古老的JSP Web应用程序.对于一些见解,请参阅以下问题的答案有一些提示

> How to avoid Java code in JSP files?
> Show JDBC ResultSet in HTML in JSP page using MVC and DAO pattern
> How to retrieve and display images from a database in a JSP page?

猜你在找的Java相关文章