如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]

Posted

技术标签:

【中文标题】如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]【英文标题】:how to retrieve image from mysql database using java servlet and show it in HTML img tag? [closed] 【发布时间】:2013-01-13 01:14:31 【问题描述】:

如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 html img 标签中?并且那个 ima 标记应该放在表定义中?

【问题讨论】:

你试过什么?你的确切目标是什么?简单的答案是创建一个 servlet,它返回一个 HTML 文档,该文档包含一个 <img> 元素,该元素具有从数据库中检索到的 src 属性。 【参考方案1】:

类似下面的代码:

public void doGet(HttpServletRequest request, HttpServletResponse response) 
  throws IOException,ServletException 

     Blob image = null;
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;
      ServletOutputStream out = response.getOutputStream();
      try 
      Class.forName("com.mysql.jdbc.Driver");
      con = DriverManager.getConnection("jdbc:mysql://127.0.0.0:3306/
       example","root","root"); // localhost:<defaultport>
      stmt = con.createStatement();
      rs = stmt.executeQuery("select image from pictures where  id = '2'");
      if (rs.next()) 
      image = rs.getBlob(1);
       else 
      response.setContentType("text/html");

      out.println("<font color='red'>image not found for given id</font>");

      return;
      
      response.setContentType("image/gif");
 InputStream in = image.getBinaryStream();
  int length = (int) image.length();
  int bufferSize = 1024;
  byte[] buffer = new byte[bufferSize];
  while ((length = in.read(buffer)) != -1) 
  out.write(buffer, 0, length);
  
  in.close();
  out.flush();

 catch (Exception e) 
  response.setContentType("text/html");
  out.println("<html><head><title>Unable To Display image</title></head>");
  out.println("<body><h4><font color='red'>Image Display Error=" + e.getMessage() +
   "</font></h4></body></html>");
  return;
   finally 
  try 
  rs.close();
  stmt.close();
  con.close();
  

【讨论】:

但我想在 HTML 中使用 标签显示它【参考方案2】:

编写一个 servlet,将其映射到像 showImage.html 这样的 url,将图像名作为参数传递

&lt;img src="showImage.html?filename=new.jpg"&gt;

然后从文件中读取字节[]并写入servlet代码中的响应OutputStream。

response.getOutputStream().write(bytes);

从文件中获取字节[]

 RandomAccessFile f = new RandomAccessFile("c:\images\pic1.png", "r");
 byte[] bytes = new byte[(int)f.length()];
 f.read(bytes);
 response.getOutputStream().write(bytes);

【讨论】:

谢谢你。你能详细解释一下吗?如果你粘贴代码会更有用。 您是否有要读取的图像文件名/路径?如果是这样,请使用上面的代码(我编辑了答案)从该文件中获取 Byte[]。 谢谢你。其实我想从 mysql 数据库中检索图像。

以上是关于如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 Servlet 连接到 MySQL 不起作用 [重复]

java如何把数据从数据库传入浏览器

如何使用一个ajax请求从java servlet返回多个json对象

从mysql数据库登录验证servlet

传递 jdbc 数据源与传递 Connection 对象 - 从 servlet 到 java 类

在 Java 中使用 Mysql 和 servlet [重复]