淺談如何調(diào)用JSP讀取數(shù)據(jù)庫中圖片并顯示在頁面上
記得當年當當網(wǎng)推出時用JSP讀取數(shù)據(jù)庫是從Oracle里讀Blob圖片,顯示到頁面上以后怎么都是個紅叉子,無奈之下請教高人,答曰:這種事情一般用Servlet搞定比較好,因為JSP讀取數(shù)據(jù)庫終究會被翻譯成JAVA代碼然后編譯成class,你的JSP難免出現(xiàn)一些格式轉(zhuǎn)換什么的代碼,一旦污染到讀出來的image,則紅叉子在所難免了。
細想之下頓覺言之有理,Google之。果然發(fā)現(xiàn)很多朋友遇到過此問題,遂查之~,見有人說去掉全部空格就OK了,想想也對,就馬上給代碼凈身(可憐我里縮外進的完美代碼格式)~~
然后代碼成了這副模樣:
Java代碼
- <%@ page import="java.awt.image.BufferedImage"%>
- <%@ page import="java.io.BufferedInputStream"%>
- <%@ page import="java.io.IOException"%>
- <%@ page import="java.sql.Connection"%>
- <%@ page import="java.sql.ResultSet"%>
- <%@ page import="java.sql.Statement"%>
- <%@ page import="java.sql.Blob"%>
- <%@ page import="oracle.sql.BLOB"%>
- <%@ page import="javax.naming.InitialContext"%>
- <%@ page import="javax.imageio.ImageIO"%>
- <%@ page import="javax.sql.DataSource"%>
- <%@ page import="javax.servlet.ServletOutputStream"%>
- <%@ page import="com.sun.image.codec.jpeg.JPEGCodec"%>
- <%@ page import="com.sun.image.codec.jpeg.JPEGImageEncoder"%>
- <%InitialContext ic=new InitialContext();
- DataSource ds=(DataSource)ic.lookup("DSNAME");
- Connection conn=null;
- conn =ds.getConnection);
- Statement stmt=null;BufferedInputStream inputimage=null;
- stmt=conn.createStatement();
- boolean defaultCommit=conn.getAutoCommit();
- conn.setAutoCommit(false);
- String photoId =request.getParameter("photo_id");
- try{
- ResultSet rs=stmt.executeQuery("SELECT * FROM TABLENAME WHERE sys_id='"+photoId+"'");
- if(rs.next()){Blob blob=(Blob)rs.getBlob("photo");
- long size=blob.length();
- byte[] bs=blob.getBytes(1,(int)size);
- response.setContentType("image/jpeg;charset=GB2312");
- response.setHeader("Content-Transfer-Encoding","base64");
- OutputStream out1=response.getOutputStream();
- BufferedOutputStream bos=null;
- bos=new BufferedOutputStream(out1);
- bos.write(bs,0,bs.length);bos.close();
- rs.close();
- }
- else
- {
- rs.close();
- }}
- finally{
- conn.close();
- }%>
然后運行之~~,呵呵,調(diào)用JSP讀取數(shù)據(jù)庫中圖片并顯示在頁面上就這樣出來了~~~
【編輯推薦】