2015-03-19 44 views
1

在我的Vaadin應用中,在我的servlet類中調用servletInitialized()方法來啓動我的應用程序,我必須通過瀏覽器至少發出一次對web應用程序url的請求。Tomcat servlet直到第一次請求才會啓動

我正在使用Intellij IDEA,我正在使用IDEA的Tomcat Server運行配置在本地tomcat實例中啓動我的web應用程序。

是否可以在部署war文件後立即啓動servlet,而無需發出請求?

回答

11
<servlet> 
    ... 
    <load-on-startup>1</load-on-startup> 
</servlet> 

這會在請求到達服務器之前實例化一個在web.xml中的servlet。

如果您在web.xml已經有了這一套,並沒有看到這個問題的任何變化,嘗試,如果你正在使用您的開發機器上的分解版本使用標準.war包進行部署。

1

雖然Crazy Ninja的accepted answer是正確的,但還有一個選擇。

ServletContextListener

Servlet規範定義了ServletContextListener接口定義要被實例化一個類和調用:

  • 你的servlet(和過濾器)的任何之前開始執行,並...
  • 之後,最後一個servlet(和過濾器)已完成執行,因爲您的web應用程序正在關閉。每當Web應用程序(以下簡稱「語境」)已經由Servlet容器初始化

你實現ServletContextListener類調​​用。

一些Servlet容器在啓動時會自動初始化它們的上下文。所以你的初始化代碼放在這裏可能會在你的第一個用戶點擊服務器之前很久才執行只要您的容器選擇初始化您的Web應用程序(上下文),請放心,Servlet規範保證任何容器都可以運行並完成運行,您的上下文偵聽器會在之前處理對servlet /過濾器的第一個調用。

我剛剛發佈了Question/Answer對這個主題,Hook for my Vaadin web app starting and stopping?。請參閱該頁面以獲得更多討論。

相關問題