即時顯示股價、比分、匯率等動態資料時,需讓頁面定時自動重新整理。JSP 透過 HttpServletResponse 的 setIntHeader() 即可輕鬆實現,無需 JavaScript。
response.setIntHeader("Refresh", 秒數);
此方法會在 HTTP 回應標頭加入 Refresh: 5,瀏覽器收到後會在指定秒數後自動重新載入頁面。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>自動刷新示範 - 數位時鐘</title>
</head>
<body>
<h2>自動刷新頁面示範</h2>
<%
// 設定每 5 秒刷新一次
response.setIntHeader("Refresh", 5);
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR);
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
String ampm = (cal.get(Calendar.AM_PM) == 0) ? "AM" : "PM";
String timeStr = String.format("%d:%02d:%02d %s", hour, min, sec, ampm);
%>
<p style="font-size: 2rem; font-family: monospace;">
當前時間:<%= timeStr %>
</p>
<p>頁面將每 5 秒自動更新...</p>
</body>
</html>
結合 AJAX 或 WebSocket 才是現代解法,但若維護舊系統,可用此法搭配資料庫查詢:
<%
response.setIntHeader("Refresh", 10); // 10 秒刷新
// 查詢最新股價
List<Stock> stocks = StockService.getLatestPrices();
%>
<table>
<tr>&th>代碼</th>&th>名稱</th>&th>現價</th>&th>漲跌</th></tr>
<c:forEach items="${stocks}" var="s">
<tr>
<td><%= s.getCode() %></td>
<td><%= s.getName() %></td>
<td><%= s.getPrice() %></td>
<td class="<%= s.getChange() >= 0 ? 'up' : 'down' %>">
<%= s.getChange() %>
</td>
</tr>
</c:forEach>
</table>
| 議題 | 說明 |
|---|---|
| 使用者體驗 | 整頁重載會閃爍、捲軸歸零、表單輸入中斷 |
| 伺服器負載 | 頻繁請求增加伺服器壓力 |
| 現代替代 | AJAX 輪詢、Server-Sent Events (SSE)、WebSocket、前端框架 (Vue/React) 配合 API |
建議:僅適用於簡單監控頁面、內部管理工具或舊系統維護。新專案請採用前端非同步更新技術。