從資料庫中讀取多張圖片並顯示在同一頁面中
阿新 • • 發佈:2019-01-22
一開始想的是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(); %>