在 JSP 頁面中顯示存儲於 Oracle 數據庫的圖片時,常遇到「不報錯但圖片不顯示」的問題。核心原因通常是圖片路徑錯誤或數據存儲方式不當。
數據庫存儲:保存圖片在服務器上的相對/絕對路徑,如 /upload/images/photo.jpg
JSP 顯示:
<img src="<%= request.getContextPath() %>/<%= news.getPicPath() %>" alt="新聞圖片" />
關鍵點:確保路徑對 Web 容器可訪問,且 PicPath 存儲的是相對 Web 根目錄的路徑。
數據庫存儲:將圖片轉為二進制存入 BLOB 字段
JSP 顯示需獨立 Servlet:
// ImageServlet.java
@WebServlet("/image/*")
public class ImageServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String id = req.getPathInfo().substring(1); // 獲取圖片ID
// 1. 從數據庫查詢 BLOB 數據
// 2. 設置響應頭
resp.setContentType("image/jpeg"); // 根據實際圖片類型
// 3. 輸出二進制流
resp.getOutputStream().write(blobData);
}
}
JSP 引用:
<img src="<%= request.getContextPath() %>/image/<%= news.getId() %>" />
https://localhost:8080/your-app/upload/images/photo.jpg
<img src="..."> 生成的路徑是否正確request.getContextPath()PicPath 字段實際存儲內容,排除編碼問題<!-- 錯誤:缺少上下文路徑 -->
<img src="<%=news.getPicPath()%>" />
<!-- 錯誤:路徑包含服務器絕對路徑 -->
<img src="C:/upload/images/photo.jpg" /> <!-- 瀏覽器無法訪問 -->
<!-- 正確:相對Web根目錄 + 上下文路徑 -->
<img src="<%=request.getContextPath()%>/<%=news.getPicPath()%>" />
核心原則:先在瀏覽器直接驗證圖片 URL 可訪問,再在 JSP 中引用。路徑問題 90% 可通過此步驟定位解決。