JSP 內建四大屬性範圍:page、request、session、application。其中 application 範圍 生命週期最長,隨應用程式啟動而建立、關閉而銷毀,全系統僅單一實例,宛如系統級「全域變數」,極適合實現跨用戶、跨請求的共享資料與服務。
傳統 MVC 以 Servlet 擔任控制器,但隨 JSP 功能增強,常以 JSP 取代 Servlet。將控制邏輯封裝於 JavaBean,並在 JSP 中以 <jsp:useBean scope="application"> 實例化,該 Bean 即常駐記憶體,可持續處理請求分派、與後端中介軟體交互,免去重複建構開銷。
首頁常需讀取資料庫生成樹狀分類導航。若每請求皆查詢資料庫,極易成為瓶頸。採用 application 範圍 Bean 載入並快取樹狀資料,搭配快取演算法(如定時刷新、LRU 淘汰),多用戶並發訪問時直接讀取記憶體資料,效能提升數量級。
JDBC 連線池屬昂貴資源,極適合放於 application 範圍。範例展示使用 Oracle OracleConnectionCacheImpl 於 globals.jsa 的 <event:application_OnStart> 初始化連線池參數(URL、帳密、Statement Cache),後續 JSP 透過 cods.getConnection() 取用、用畢 conn.close() 歸還池中,實現高效連線複用。
<jsp:useBean id="cods" class="oracle.jdbc.pool.OracleConnectionCacheImpl" scope="application" />
<event:application_OnStart>
<%
cods.setURL("jdbc:oracle:thin:@HOST:PORT:SID");
cods.setUser("scott");
cods.setPassword("tiger");
cods.setStmtCache(5);
%>
</event:application_OnStart>
application_OnEnd 釋放資源(關閉連線池、清理快取)。善用 application 範圍,能在不引入外部框架前提下,顯著提升 JSP 應用的擴展性與回應速度。