資料庫中儲存指紋圖片(BLOB),JSP 頁面需透過 <img> 標籤指向後端 Action 串流輸出,而非直接嵌入 Base64(過大影響頁面載入)。
<img src="personAction_showByID.action?personId=${param.personId}"
title="指紋圖片" style="width:200px; height:250px;" />
public class PersonAction extends ActionSupport {
private PersonService personService;
private String personId;
// getter/setter
public String showByID() {
HttpServletResponse response = ServletActionContext.getResponse();
try {
Person person = personService.getPerson(personId);
byte[] photo = person.getImg(); // BLOB 映射為 byte[]
if (photo != null) {
response.setContentType("image/jpeg"); // 或 png/bmp 視實際格式
response.setContentLength(photo.length);
try (ServletOutputStream out = response.getOutputStream()) {
out.write(photo);
out.flush();
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} catch (Exception e) {
e.printStackTrace();
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
return NONE; // 直接輸出流,不轉發視圖
}
}
image/jpeg 或檢測魔數。response.setHeader("Cache-Control", "max-age=3600"); 減少重複請求。@Entity
@Table(name = "fingerprint")
public class Person {
@Id @Column(name = "person_id")
private String personId;
@Lob @Basic(fetch = FetchType.LAZY)
@Column(name = "img_data", columnDefinition = "BLOB")
private byte[] img;
// getter/setter
}
此模式適用於所有「資料庫 Blob → 網頁圖片顯示」場景(驗證碼、用戶頭像、文檔預覽等)。