日期:2014-05-17  浏览次数:20741 次

Java servlet 显示多张图片的问题。
try {
BLPrplFileUploadCollect blPrplFileUploadCollect = new BLPrplFileUploadCollect();
blPrplFileUploadCollect.query(" businessNo='周星驰'");
for (int j = 0; j < blPrplFileUploadCollect.getSize(); j++)
{
PrplFileUploadCollectSchema prplFileUploadCollectSchema = blPrplFileUploadCollect.getArr(j);
String queryString = prplFileUploadCollectSchema.getUploadServerName();
System.out.println("queryString == " + queryString);
//以上的方法是从数据库中取得图片的路径 。比如 blPrplFileUploadCollect.getSize() = 5次。此地方循环5次。
均是得到D:\loadfile\temp\2012\0000000000\201207250544308623Desert.jpg 这样的路径。 可是这样循环5次,最后得到的图片只能是第一次循环出现的结果。 queryString = “D:\loadfile\temp\2012\0000000000\201207250544308623Desert.jpg ”;

OutputStream output = response.getOutputStream();// 得到输出流
BufferedOutputStream bos = new BufferedOutputStream(output);// 输出缓冲流
FileInputStream hFile = new FileInputStream(queryString); // 以byte流的方式打开文件
int i = hFile.available(); // 得到文件大小
byte data[] = new byte[i];
int size = 0;
size = hFile.read(data);
while (size != -1) {
bos.write(data, 0, size);
size = hFile.read(data);
hFile.read(data); // 读数据
response.setContentType("image/*"); // 设置返回的文件类型
OutputStream toClient = response.getOutputStream(); // 得到向客户端输出二进制数据的对象
toClient.write(data); // 输出数据
hFile.close();
toClient.close();
}

我的问题是: 有没办法显示多张图片。这样每次只能显示第一张图片,后面的没办法显示。
或者有没有什么办法,能让图片不在servlet中显示。最好是在jsp中显示。jsp中的src 要怎么写。请指教。这个问题困挠好久了。

------解决方案--------------------
在jsp上写个循环,图片的名称最好相差一如,1.jpeg,2.jpeg类似,循环的时候img 的src指向xxx/循环次数.jpeg
------解决方案--------------------
对Servlet返回图片这个过程理解错了。

在HTML中,每一句:
<img src="imageservlet?id=xxxxoooo" />

都将独立的请求一次 imageservlet,HTTP指令类似于:
GET /context/imageservlet?id=xxxxoooo HTTP/1.0

那么这个servlet也将仅就这次请求,独立的返回一张图片的内容,servlet之内不应该有任何循环。



不知道这么说你理解不?
------解决方案--------------------
要循环的是 HTML 页面,而不是 Servlet。。。。


JSP中类似于:
<% while (rs.next) { %>
<img src="imageservlet?id=<%=rs.getString("ID");%>" />
<%}%>

这就形成了一组的 <img> 标签。


所以Servlet这边每次只需要处理一张。



话说,你这分数给太多了,有个20分就够了。
------解决方案--------------------
Servlet每次只能处理一个文件,所以外层for循环必须消灭掉。

此外关于文件输出部分也是彻底写错了。。。。
Java code

response.setContentType("image/*"); // 设置返回的文件类型
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());// 输出缓冲流
FileInputStream hFile = new FileInputStream(queryString); // 以byte流的方式打开文件
try {
  byte data[] = new byte[8192];
  int size = 0;
  while ((size = hFile.read(data)) != -1) {
    bos.write(data, 0, size);
  }
  bos.flush();
} finally {
  hFile.close();
}