使用jsp-servlet从数据库中检索多个图像

时间:2010-10-02 08:21:17

标签: java database jsp servlets image-processing

查看以下用于从数据库中检索图像的代码段:

response.setContentType("image/gif");
String url="jdbc:oracle:thin:@localhost:1521:xe";
String username="xyz";
String password="abc";

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection(url,username,password);
String sql="Select name,description,image from pictures";
PreparedStatement stmt=conn.prepareStatement(sql);
ResultSet resultSet=stmt.executeQuery();
ServletOutputStream sos=response.getOutputStream();

while(resultSet.next()) {
    byte[] buffer=new byte[1];

    InputStream is=resultSet.getBinaryStream(3);
    while(is.read(buffer)>0){
      sos.write(buffer);
}
sos.println();
sos.flush();
}

sos.close();
conn.close();

我正在尝试使用此代码来显示从数据库中检索的图像。该代码应该从存储在数据库中的多行中检索多个图像。但此代码显示单个图像。

3 个答案:

答案 0 :(得分:3)

为什么会显示多张图片?您正在将响应的内容类型设置为image / gif,这意味着浏览器将需要单个图像。但是,您将多个图像流式传输到响应流中。

所以我怀疑浏览器只拍摄了第一张图片。它也可以拒绝整个响应被破坏(因为我们有多个图像流在一起)。

您需要识别为每个请求检索的哪个图像,并修改上述内容以提取单个图像(通过适当修改SQL)。

答案 1 :(得分:1)

您无法一次返回多张图片。您可以将对servlet的访问视为对文件的访问。

在这里,您创建了一个包含多个图像的“文件”。大多数图像渲染器只能看到存储在“文件”中的第一个图像。

如果您想拥有多个图片,则必须执行多个请求(或打开多个文件)。

答案 2 :(得分:1)

正如布莱恩和科林已经指出的那样,你不能有多个图像,所有图像都是同时访问的。 看来你的任务是在同一页面上有很多图像。然后是Brian建议的方式之一(使用调用图像的JSP)。 另一种方法是将页面划分为多个框架集,这些框架集本身可以像JSP那样调用图像。