public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在資料庫中照片的ID
String PHOTOID = null;
try {
PHOTOID = request.getParameter("photoid");
}
catch(Exception e) {
e.printStackTrace();
}
//串連資料庫,自訂的資料庫連接池管理類
DBConnectionManager connMgr;
connMgr = DBConnectionManager.getInstance();
Connection conn = connMgr.getConnection("comdb"); //屬性檔案中定義
//用來儲存照片資料的緩衝區
byte [] buf=null;
//副檔名可以從資料庫得到,這裡直接指定為JPEG
String photoname="jpeg";
try{
//根據ID尋找照片
String searchSql="select photo from employee where id ="+PHOTOID;
Statement stmt = conn.createStatement();
ResultSet RS_photo = stmt.executeQuery(searchSql);
//將圖片資料讀入緩衝區
if (RS_photo.next()){
buf = RS_photo.getBytes(1);
}else
{
buf = new byte[0];
}
}catch (Exception e){
//throw e;
}
finally {
connMgr.freeConnection("comdb", conn);
}
//response.setContentType(CONTENT_TYPE);
//告訴瀏覽器輸出的是圖片
response.setContentType("image/"+photoname);
//圖片輸出的輸出資料流
OutputStream out = response.getOutputStream();
//將緩衝區的輸入輸出到頁面
out.write(buf);
//輸入完畢,清楚緩衝
out.flush();
}
/**Clean up resources*/
public void destroy() {
}
}
編譯後的Servlet getphoto.class也會自動放置在工程檔案的WEB-INF下的classes目錄下。
2.3 JSP實現資料庫圖文資訊瀏覽
成功建立好Servlet後,下一步要做的工作就是將原先的HTML標記:
<img src="../image/"+RS_photo.getString(photo_fiield) width="100" height="80">加以修改,替換為Servlet標記。即可以將下面的標記寫於HTML或JSP中頁面中
<img border="0" src="/servlet/getphoto?photoid=XXX&ts=AAAAA" >
其中XXX是圖片的ID,AAAAA是時間戳記,用來防止圖片不重新整理。如果我們要瀏覽資料庫中的所有圖文資訊,可以加入適當的迴圈控制。在本文的樣本WEB應用程式中作者加入了簡單的表格控制來修飾輸出的圖文資訊。