一开始想的是while(rs.next())循环读取每张图片并直接保存在session中,传到InputStream中,形成一张张图片,后来发现InputStream对象被覆盖了,意思是在同一页面中显示的是多张一样的图片,而且还是最后一张的。
还想的要images.jsp文件循环输出一下,最后出现的结果是整个页面都出不来图片了。
始终还得记着images文件每次只能形成一张图片,那么我们可以给图片个id,再调用根据id查询的方法,每次根据id获得一张图片,并形成一张图片。执行多次,就会有多张图片。
代码如下;
<%
int i=i;
while(rs.next()){ //rs是所有记录的总和,是个全部结果集,包含的图片也是全部,所以赋值i=1;从第一张图片开始遍历
%>
<a href="imageFound.jsp" >//imageFound.jsp原理跟images.jsp文件一样,调用得方法不同,因为有id存在
<img src="imageFound.jsp?i=<%=i%>></a>
<%
i++;
} %>
imageFound.jsp
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<% //虽然每次只能生成一张图片,但是每次传过来的i在变,根据i查出的图片也在变
int i=Integer.parseInt(request.getParameter("i"));//接受传过来的i值,目的匹配与数据库中图片的id
ResultSet rs=info.SelectIds(i);//调用方法根据id查询图片
while(rs.next()){
InputStream is =rs.getBinaryStream("photo");
OutputStream os=null;
response.setContentType("text/html");
os = response.getOutputStream();
byte[] buffer=new byte[1024];//一次传的文件量
int len=0;
try {
while((len=is.read(buffer))>0){//读
os.write(buffer, 0, len);//写 (,起始位置,长度)
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
out.clear();
out=pageContext.pushBody();
%>