2009-09-18 87 views
2

我有一個相當大的基於戰爭的網絡應用程序。當我啓動它時,即使應用程序未啓動,Tomcat也會立即允許連接。因此,用戶在加載應用程序之前會得到一個空白頁面。啓動大型網絡應用程序時的空白頁面

我看到一些網絡應用程序在應用程序加載時顯示「網頁應用程序正在啓動,請稍候」頁面。有沒有一種簡單的技術讓java應用程序能夠做到這一點?

+1

問題是您需要多長時間啓動一次應用程序?我預計,在應用程序啓動後,它應該運行良好,直到下一次您關閉服務器進行維護時,應該不會太頻繁。 – 2009-09-18 16:59:36

+0

@vincent,當我們部署一個新版本時,這只是一個真正的問題。我很樂意看到使用更友好的頁面而不是空白頁面。 – manalang 2009-09-18 18:14:49

回答

1

我懷疑你的servlet在init()方法中做了很多初始化。你可以將它卸載到一個單獨的線程上,並記錄該線程何時完成?您可以提供一個servlet filter,它檢查該線程和中斷請求的進度(帶有「請稍候」)消息,直到初始化線程完成。

+0

+1。 'init()'不限於servlet,可以是上下文監聽器(通常用於Spring /某些其他框架)或其他過濾器。因此,在插入過濾器的地方你必須小心,否則在所有事情都被初始化之前,它甚至不能控制。 – ChssPly76 2009-09-18 16:59:09

+0

看起來像這種功能應該內置到容器中...就像應用程序仍在加載時容器顯示503頁面一樣。 – manalang 2009-09-18 18:15:42

+0

聽起來好像是一些長時間運行的初始化正在對Web應用程序的第一次調用發生,如可能連接到數據庫並預先填充某些信息。我的建議是確定導致延遲的原因,然後讓容器啓動時加載的servlet開始初始化過程。指示此初始化完成時的靜態字段可用於決定是否顯示「請稍等」頁面,或直接轉到正常的Web應用程序。 – monceaux 2009-09-18 20:15:31

1

當您在複雜系統上工作時,很難避免在初始化或重新加載階段長時間等待。你必須從各個方面解決這個問題。

這是從我自己的經驗了一些建議,

  1. 不要執行按需初始化,如連接到數據庫的第一次請求。在切斷啓動時盡一切努力。
  2. 無灰色狀態。它正在啓動或初始化。殺死服務器,如果它部分工作,負載平衡器可以完成它的工作。如果狀態不是UP,只需發送「please wait」。
  3. 如果可以,請在ContextListener中執行初始化。 Servlet.init()只能用於特定於單個servlet的事物。
  4. Tomcat在啓動過程中排隊請求。所以你需要在一個不同的線程中執行很長的init任務,這樣Tomcat可以將上下文標記爲UP,並且你可以發送這個「請稍候」的消息。我們也減少了連接器隊列的大小。
  5. 當沒有服務器啓動或者所有服務器都很忙時,負載均衡器/交換機需要配置爲靜態的「請稍候」頁面。
相關問題