根據伺服器時間 (上午/下午) 動態轉發至不同的問候頁面,展示 `jsp:forward` 核心用法:請求屬性保留、URL 不變、伺服端內部跳轉。
<%@ page contentType="text/html;charset=UTF-8" import="java.util.Date" %>
<html><body>
<%
Date now = new Date();
// 注意:Date.getHours() 已棄用,建議用 Calendar 或 java.time
int hour = now.getHours(); // 0-23
%>
<%
if (hour <= 12) {
%>
<jsp:forward page="AmGreeting.jsp"/>
<%
} else {
%>
<jsp:forward page="PmGreeting.jsp"/>
<%
}
%>
</body></html>
<%@ page contentType="text/html;charset=UTF-8" %>
<html><head><title>早安</title></head><body>
<h1>Good Morning!</h1>
<%
// forward 保留原始 request,可直接取得參數
String name = request.getParameter("userName");
out.println("歡迎, " + (name != null ? name : "訪客") + "!");
%>
</body></html>
<%@ page contentType="text/html;charset=UTF-8" %>
<html><head><title>午安</title></head><body>
<h1>Good Afternoon!</h1>
<%
String name = request.getParameter("userName");
out.println("歡迎, " + (name != null ? name : "訪客") + "!");
%>
</body></html>
| 特性 | 表現 |
|---|---|
| 瀏覽器網址列 | 維持 `time.jsp` (或原始請求 URL) |
| request 參數 | 目標頁面可用 `request.getParameter("userName")` 取得 |
| request 屬性 | 若在 `time.jsp` 做 `request.setAttribute("key", val)`,目標頁面可取得 |
| Response 已提交前 | 必須在輸出任何內容前執行 forward,否則拋 `IllegalStateException` |
<%@ page import="java.time.LocalTime" %>
<%
int hour = LocalTime.now().getHour(); // 0-23, 線程安全、不可變
String target = (hour <= 12) ? "AmGreeting.jsp" : "PmGreeting.jsp";
%>
<jsp:forward page="<%= target %>" />
@WebServlet("/time")
public class TimeServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
int hour = LocalTime.now().getHour();
String target = (hour <= 12) ? "/AmGreeting.jsp" : "/PmGreeting.jsp";
req.getRequestDispatcher(target).forward(req, resp);
}
}