構建動態網站時,靈活性與美觀常成矛盾。網頁設計師為視覺效果大量使用圖片,甚至在動態輸出內容(如欄目標題)上也用圖片。但這些內容常需變更,傳統靜態圖片無法勝任,通常採取折衷方案:降低視覺要求改用文字,或要求維護人員頻繁重製圖片。
利用 HTML <img> 標籤的 src 屬性不限制檔案類型的特性。瀏覽器解析 <img src="/imageServlet"> 時會向伺服器發送 HTTP 請求。若 Servlet 回應正確的 Content-Type: image/jpeg 並輸出圖片資料流,瀏覽器即可正常顯示。
進一步地,Servlet 在輸出前對原始圖片進行處理:在指定位置加入文字、陰影、立體效果等,再輸出處理後的圖片資料流,即可實現動態圖文結合。
<img> 的 src 中調用實現功能的 Servlet,傳遞背景圖片路徑、輸出文字、位置、字體、大小等參數。Graphics2D 繪製文字與效果。Content-Type 為 image/jpeg(或 png/gif),將處理後的圖片資料流寫入 ServletOutputStream。// 設定回應類型
response.setContentType("image/jpeg");
ServletOutputStream out = response.getOutputStream();
// 讀取背景圖片
BufferedImage image = ImageIO.read(new File(bgPath));
Graphics2D g = image.createGraphics();
// 繪製文字
g.setFont(new Font(fontName, Font.BOLD, fontSize));
g.setColor(fontColor);
g.drawString(text, x, y);
g.dispose();
// 輸出圖片
ImageIO.write(image, "jpeg", out);
out.flush();
out.close();
此技術完美解決了動態內容與視覺效果的衝突,廣泛應用於動態標題、水印生成、圖表輸出等場景。