<jsp:useBean>執行邏輯:
scope 尋找同 id 的 Bean,找到則直接使用,跳過初始化。scope 建立實例,並執行標籤主體內的初始化敘述。注意:若確定要設定當前 scope 的 Bean 狀態,避免將設定敘述寫在 useBean 主體內,應移至標籤外部。
package.classname beanname = new package.classname();
// 依需求放入不同 scope
request.setAttribute("beanname", beanname); // request
session.setAttribute("beanname", beanname); // session
getServletContext().setAttribute("beanname", beanname); // application
| Scope | JSP 存取方式 | Servlet 存取方式 |
|---|---|---|
| page | pageContext 或直接引用 | (無對應,僅頁面內有效) |
| request | request | request.get/setAttribute() |
| session | session | request.getSession().get/setAttribute() |
| application | application | getServletContext().get/setAttribute() |
| Scope | 適用場景 |
|---|---|
| page | 單一頁面內的暫時變數實例(預設值)。 |
| request | 一次請求生命週期內有效(含 forward)。 |
| session | 單一用戶會話期間有效,跨請求共享。 |
| application | 整個 Web 應用生命週期有效,類似 static,全域共享。 |
掌握以上要點,可在 JSP 與 Servlet 間靈活、正確地傳遞與共享 JavaBean 實例。