首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

JSP forward 動態轉發實戰:根據時間導向不同問候頁面

     編輯:關於JSP

應用場景

根據伺服器時間 (上午/下午) 動態轉發至不同的問候頁面,展示 `jsp:forward` 核心用法:請求屬性保留、URL 不變、伺服端內部跳轉。

核心邏輯頁面 (time.jsp)

<%@ 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`

現代化改寫建議 (java.time)

<%@ page import="java.time.LocalTime" %>
<%
    int hour = LocalTime.now().getHour(); // 0-23, 線程安全、不可變
    String target = (hour <= 12) ? "AmGreeting.jsp" : "PmGreeting.jsp";
%>
<jsp:forward page="<%= target %>" />

Servlet 對應寫法

@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);
    }
}

常見錯誤與避坑

  1. forward 後仍有程式碼執行: forward 後應立即 `return` 或確保後續無輸出邏輯。
  2. 目標頁面不存在: 拋 `FileNotFoundException`,建立統一錯誤頁面處理。
  3. 相對路徑問題: `page` 屬性相對於 Web 應用根目錄 (以 `/` 開頭) 或當前頁面目錄。建議統一用絕對路徑 `/AmGreeting.jsp`。
  4. 編碼亂碼: 確保所有 JSP 同樣設定 `pageEncoding="UTF-8"`,或配置 Filter 統一編碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved