在 Web 應用系統中,文件匯出功能幾乎是標準配置。無論是將資料庫查詢結果導出為 Word 報表、Excel 試算表,還是需要從資料庫 BLOB 欄位讀取並顯示文件,掌握 JSP 動態生成與輸出文件的技巧都至關重要。本文系統整理了客戶端直出生成、資料庫 Blob 讀取輸出等核心場景,提供可直接落地的程式碼範例。
最簡單的方式是在 JSP 頁面頂部修改 contentType,瀏覽器會自動以 Word 格式開啟或下載頁面內容。
<%@ page contentType="application/msword; charset=utf-8" %>
將原本的 text/html 改為 application/msword,並建議使用 UTF-8 編碼避免中文亂碼。頁面上的 HTML 表格、樣式將直接在 Word 中呈現。
若需彈出「另存新檔」提示,而非直接在瀏覽器開啟,需加入 Content-Disposition 標頭:
<%
response.setHeader("Content-Disposition", "attachment;filename=" + docName + ".doc");
%>
docName 可動態傳入(如 <%=docName%>),實現自訂檔名下載。
若需依照預先設計的 Word 版面輸出,可先在 Word 編排好格式,另存為「網頁」格式(會產生 HTML),再將該 HTML 代碼貼入 JSP 中,即可保留原有排版風格。
許多 OA 系統將上傳的 Word 文件以二進位方式存入 Oracle BLOB 欄位。下方示範如何透過自訂 Bean 讀取並輸出給客戶端。
package yourpackage;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import oracle.sql.*;
import beans.yourbeanpackage.getBlobBean;
/**
* 從 Oracle BLOB 讀取 Word 文件並輸出
*/
public class BlobReader {
// 具體實作略,重點在於:
// 1. 取得 Connection
// 2. 執行 SELECT blob_column FROM table WHERE id=?
// 3. 以 getBinaryStream() 讀取輸出流
// 4. response.setContentType("application/msword")
// 5. 將輸入流寫入 response.getOutputStream()
}
關鍵點提醒:
oracle.sql.BLOB 相關類別,確保驅動程式相容。Content-Type 與 Content-Disposition。本文著重於 Word 生成與 Blob 讀取。若需生成 Excel,可將 contentType 設為 application/vnd.ms-excel,並輸出 HTML 表格;若需標準 PDF,建議引入 iText 或 Apache PDFBox 函式庫在 Servlet 層生成,再由 JSP 或 Controller 回傳二進位流,架構更清晰且效能更佳。
JSP 透過調整 HTTP 標頭即可實現簡易文件匯出;複雜排版可借助 HTML 過渡;資料庫 Blob 讀取則需搭配 JDBC 流式處理。實務上建議將文件生成邏輯移至 Service 層,JSP 僅負責回傳結果,符合 MVC 分層原則,利於維護與擴充。