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

Struts2 中如何實現 Servlet 的 init() 單次初始化邏輯

     編輯:程式設計綜合問答

核心觀點

不要試圖將 Servlet 硬塞進 Struts2。Struts2 的 Action 是多例(每請求一個實例),而 Servlet 是單例(容器啟動時初始化一次),生命週期完全不同。

替代方案

  1. Spring Bean 初始化:將初始化邏輯寫在 Spring Bean 的 @PostConstruct 或 init-method 中,Spring 容器啟動時自動執行一次。
  2. ServletContextListener:實作 contextInitialized,在 Web 應用啟動時執行全域初始化(如載入配置、建立連線池)。
  3. Struts2 Interceptor:若需在每次請求前做某事,寫攔截器;但無法保證「僅第一次」執行,除非自行加旗標同步。

web.xml 載入順序參考

ServletContext → context-param → listener → filter → servlet

若確實需要 Servlet,直接在 web.xml 宣告並設定 load-on-startup 即可,Struts2 透過 Filter 攔截請求,兩者共存無衝突。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved