通过JSP显示BLOB(图像)

我有一个代码来显示员工的图表。

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

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

有谁知道我怎么能’构图’图像?

<% Connection con = FactoryConnection_SQL_SERVER.getConnection("empCHART"); Statement stSuper = con.createStatement(); Statement stSetor = con.createStatement(); Blob image = null; byte[] imgData = null; ResultSet rsSuper = stSuper.executeQuery("SELECT * FROM funChart WHERE dept = 'myDept'"); if (rsSuper.next()) { image = rsSuper.getBlob(12); imgData = image.getBytes(1, (int) image.length()); response.setContentType("image/gif"); OutputStream o = response.getOutputStream(); //o.write(imgData); // even here we got the same as below. //o.flush(); //o.close(); --[...] 
<img title="" src="" />

Id:

Phone:

E-Mail:

以下是应该构图图像的片段:

 #photo { padding: 0px; vertical-align: middle; text-align: center; width: 170px; height: 220px; } 

提前致谢 !

你在这里犯了一些根本性的错误。 必须指向一个URL,不包含图像的二进制内容。 JSP页面本身的内容类型不应设置为image/gif 。 它应该保持默认为text/html 。 Web服务器不应该像您期望的那样在HTML结果中包含具体图像。 Web浏览器根据src属性中的URL单独下载图像,然后相应地显示它们。

最简单的方法是创建一个单独的servlet,将图像从DB流式传输到响应主体。 您可以通过请求参数或路径信息唯一标识图像。 这是一个使用请求参数的示例:

 " /> 

然后, doGet()方法应该基本上执行此作业:

 String id = request.getParameter("id"); // ... InputStream input = resultSet.getBinaryStream("imageColumnName"); OutputStream output = response.getOutputStream(); response.setContentType("image/gif"); // Now write input to output the usual way. 

具体问题无关 ,自从十年以来,正式强烈建议不要使用这种方式使用scriptlet 。 也许您正在阅读完全过时的书籍/教程,或者正在维护一个古老的JSP Web应用程序。 有关一些见解,请参阅以下问题的答案以获取一些提示:

  • 如何避免JSP文件中的Java代码?
  • 使用MVC和DAO模式在JSP页面中以HTML格式显示JDBC ResultSet
  • 如何从JSP页面中的数据库中检索和显示图像?

如果要通过HTML标记显示图像,则必须将图像指向加载图像的服务器中的资源,以便客户端浏览器可以加载它。 这样,您可以设置标记的样式。

为实现此目的,大多数人编写一个ImageServlet来加载图像的二进制数据并写入" id = "photo"/>

  Connection con = new DBConnection().getConnection(); String sql = " SELECT * FROM tea "; PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while (rs.next()) { byte[] imgData = rs.getBytes("img"); // blob field request.setAttribute("rvi", "Ravinath"); rs.getString("teatitle"); String encode = Base64.getEncoder().encodeToString(imgData); request.setAttribute("imgBase", encode); } 

然后在jsp页面上使用jstl作为提取属性

   
 //globle variable List listmap = new ArrayList();//with getter/setter //method Connection con = conn.getConnection(); PreparedStatement ps = null; String query="select img from tablename"; ps = con.prepareStatement(query); resultSet = ps.executeQuery(); while (resultSet.next()) { PackagePojo p1=new PackagePojo(); // pojo class with field private String imagePath with getter/setter; byte[] img = resultSet.getBytes("PTOIMAGE");//PTOIMAGE db column name String encode=Base64.encodeBase64String(img ); p1.setImagePath(encode); listmap.add(p1); } //in jsp with struts2  bhudutt