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

Servlet 與 JSP 數據傳遞全解析:雙向通信的兩種核心模式

     編輯:Java 程式設計入門

Servlet 與 JSP 的數據交互是 Java Web 開發的基石。本文系統梳理 JSP→Servlet 和 Servlet→JSP 兩大方向的傳值機制,深度解析 request、session 作用域的差異,並揭示 URL 映射與轉發重定向的關鍵細節。

一、JSP 向 Servlet 傳值:三種途徑

1. 表單提交

<form action="JspServlet?action=toServlet" method="post">
    <input name="username" type="text" />
    <input type="submit" value="submit">
</form>

Servlet 獲取:request.getParameter("username")

2. URL 參數

<a href="JspServlet?action=toServlet">點擊</a>

Servlet 獲取:request.getParameter("action") — 注意:URL 必須匹配 web.xml 中的 url-pattern

3. Session 作用域

<%
    session.setAttribute("testSession", "Hello session");
    request.setAttribute("testRequest", "Hello request");  // 此處無效!
%>

關鍵結論:JSP 內聯代碼設置的 request 屬性,Servlet 無法獲取(因為是不同的 request 對象),只能通過 session 傳遞。

二、Servlet 配置與 Request/Session 獲取

URL 映射陷阱

<servlet-mapping>
    <servlet-name>JspServlet1</servlet-name>
    <url-pattern>/JspServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>JspServlet2</servlet-name>
    <url-pattern>/admin/JspServlet</url-pattern>
</servlet-mapping>

不同目錄下的 JSP 訪問同一 Servlet,需註冊多個 url-pattern:

  • 根目錄 JSP:action="JspServlet"
  • admin 目錄 JSP:action="admin/JspServlet"

Session 獲取最佳實踐

// 判斷 session 是否過期
if (request.getSession(false) == null) {
    // session 已失效
} else {
    // session 有效
    HttpSession session = request.getSession();
}

getSession(true)(默認)會自動創建新 session,getSession(false) 不會。

三、Servlet 向 JSP 傳值:轉發 vs 重定向

特性請求轉發重定向
URL 變化不變改變
Request 屬性可傳遞不可傳遞
Session 屬性可傳遞可傳遞
APIRequestDispatcher.forward()response.sendRedirect()
路徑格式以 / 開頭不以 / 開頭

轉發代碼範例

String data = "good well";
request.setAttribute("test", data);
RequestDispatcher rd = request.getRequestDispatcher("/test.jsp");
rd.forward(request, response);

重定向代碼範例

response.sendRedirect("test.jsp");  // 無前導斜線
// 僅能傳遞 session 屬性

核心建議

  • 同一請求處理鏈路:優先使用 轉發,保持 request 屬性
  • 跨應用、需改變 URL 或防止表單重複提交:使用 重定向
  • 明確區分 request、session、application 三個作用域的生命周期
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved