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

JBuilder 2005 Servlet 自動啟動配置實戰:啟動時快取用戶資料

     編輯:Java 程式設計入門

前言

Servlet 區別於 JSP 的關鍵特性:可透過 web.xml 配置 <load-on-startup>,在 Web 容器啟動時自動初始化。本文示範在 JBuilder 2005 中建立自啟動 Servlet,於啟動期快取系統用戶資料至記憶體。

適用場景

  • 資料極少變動 (如用戶表、字典表、配置表)
  • 讀取頻率極高,需毫秒級回應
  • 啟動時載入,運行期提供 refresh 介面供手動更新

步驟一:建立 Servlet (UserCacheServlet)

  1. File → New → Web → Standard Servlet
  2. Class name: UserCacheServlet, Package: bookstore.servlet
  3. 選擇覆寫方法:保留預設 doGet() (供手動刷新呼叫),稍後手動加入 init()
  4. URL pattern: /usercacheservlet

步驟二:配置 web.xml 自動啟動

雙擊專案 webModule 節點,開啟 Web Module DD Editor。

  1. 展開 Servlets → 找到 usercacheservlet
  2. 設定 Load on Startup = 1 (正整數,數字越小越早啟動)
  3. 儲存,web.xml 將產生:
<servlet>
    <servlet-name>usercacheservlet</servlet-name>
    <servlet-class>bookstore.servlet.UserCacheServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>usercacheservlet</servlet-name>
    <url-pattern>/usercacheservlet</url-pattern>
</servlet-mapping>

步驟三:實作 init() 與 doGet()

public class UserCacheServlet extends HttpServlet {
    private static Map<Long, String> userCache = new ConcurrentHashMap<>();
    
    @Override
    public void init() throws ServletException {
        super.init();
        loadUsers(); // 容器啟動時自動執行
    }
    
    private void loadUsers() {
        // 模擬從資料庫載入
        userCache.clear();
        userCache.put(1L, "Alice");
        userCache.put(2L, "Bob");
        userCache.put(3L, "Charlie");
        System.out.println("用戶快取載入完成,共 " + userCache.size() + " 筆");
    }
    
    // 手動刷新入口:GET /usercacheservlet
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        loadUsers();
        resp.getWriter().write("用戶快取已刷新,當前筆數:" + userCache.size());
    }
    
    // 供其他元件呼叫
    public static String getUserName(Long id) {
        return userCache.get(id);
    }
}

驗證方式

  1. 啟動專案 → 控制台應出現「用戶快取載入完成」
  2. 瀏覽器訪問 https://localhost:8080/webModule/usercacheservlet → 顯示刷新成功
  3. 其他 Servlet/JSP 呼叫 UserCacheServlet.getUserName(id) 即時取得資料

注意事項

  • load-on-startup 必須為 正整數,0 或負數不生效
  • init() 中異常會導致 Servlet 初始化失敗,容器可能標記為不可用
  • 快取資料結構建議用 ConcurrentHashMap 或 Cache 框架 (Ehcache/Caffeine)
  • 叢集環境下,各節點獨立載入,需考慮分散式快取 (Redis/Hazelcast)

總結

load-on-startup 是 Servlet 規範提供的強大功能,配合 init() 可實現啟動期資料預熱,大幅降低首次請求延遲。JBuilder 視覺化配置降低了出錯機率,實務中建議搭配快取框架使用。

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