1. 程式人生 > >從資料庫中讀取多張圖片並顯示在同一頁面中

從資料庫中讀取多張圖片並顯示在同一頁面中

一開始想的是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();
   
    
%>