我是Servlets的新手。我想使用一種在部署到服務器後僅調用一次的方法。我看着HttpServlet#init()
。但我發現每次請求都會調用它。我誤解了嗎? init()
有什麼選擇?我想使用在部署到服務器後僅調用一次的方法
7
A
回答
20
不,它不是在每個請求調用。它只在servlet的初始化過程中調用,這通常只會在webapp的一生中發生一次。另請參閱this answer瞭解更多詳細信息,瞭解如何創建和執行servlet。如果你實際上想做一些全局/應用範圍的初始化(因此它本身並不僅限於特定的servlet),那麼你通常會使用ServletContextListener
來實現這一點。你可以在contextInitialized()
方法中做初始化的東西。
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class Config implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// Do stuff during webapp's startup.
}
public void contextDestroyed(ServletContextEvent event) {
// Do stuff during webapp's shutdown.
}
}
如果你不上Servlet 3.0
但並不能升級,因此無法使用@WebListener
註解,那麼你需要手動註冊在/WEB-INF/web.xml
象下面這樣:
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
1
init()
僅在創建servlet時被調用。這可能會在服務器的生命週期中發生多次。您可以使用它來初始化常規使用該servlet所需的任何變量或邏輯。
編輯: 在重新閱讀您的文章後,並沒有在技術上調用每個請求,因爲服務器正在爲每個請求創建一個新的servlet實例。檢查你的服務器設置,看它是否會在服務器的整個生命週期中獲得一個保持單個servlet的新servlet。
2
你正在尋找一個ServletContextListener?
相關問題
- 1. 用Git部署到我的服務器
- 2. 使用Aptana部署到Tomcat服務器
- 3. Capifony + Symfony2的:使用帽錯誤部署到我的服務器
- 4. 使用JQuery調用服務器方法
- 5. 使用FlashDevelop部署到服務器和遠程調試?
- 6. Symfony服務僅在方法調用後才啓動
- 7. Maven在第一次運行後不部署應用程序/啓動服務器
- 8. VSTS - 無法部署到內部部署的Web服務器
- 9. 如何使@Schedule方法一次僅調用一次
- 10. 使用WAMP服務器在Windows服務器上部署laravel 5
- 11. 有沒有一種方法可以在服務於Nexus發佈時使用Cargo部署到JBOSS服務器?
- 12. 在viewDidLayoutSubviews之後調用一次方法
- 13. 在使用$ timeout的服務中不會僅調用一次回調函數
- 14. CDbCommand部署到服務器
- 15. 如何確保一次僅調用一次asmx Web服務?
- 16. 部署到另一臺服務器
- 17. Web從Visual Studio 2010一次部署到多個服務器
- 18. 服務器控件事件不調用後調用page_clientvalidate()方法
- 19. 服務器重新加載後第一次請求(僅*第一次請求)發生內部服務器錯誤
- 20. 將django項目部署到測試服務器的好方法?
- 21. 我有一個Web服務,我想從Android設備調用的特定方法
- 22. 方法在服務器端被調用兩次,爲什麼?
- 23. 如何將我的node.js應用程序部署到服務器?
- 24. 部署到服務器codeigniter應用程序後給出404
- 25. 使用webhooks設置web服務器部署的標準方式
- 26. 在NANT腳本中使用scp部署到遠程服務器
- 27. 在teamcity中使用msbuild部署到遠程服務器
- 28. 無法使用eclipse在tomcat服務器上部署我的maven項目
- 29. 我可以在一個nginx服務器上部署我的.war
- 30. 部署Web應用程序到Tomcat服務器使用Maven
感謝, ,,那麼contextInitialized和init()之間的主要區別是什麼,首先應該運行什麼? – mebada 2010-03-02 16:07:27
在webapp啓動時執行'ServletContextListener#contextInitialized()'。 'HttpServlet#init()'在servlet啓動時執行。我認爲現在應該很明顯,當webapp尚未啓動時,servlet不能被初始化/啓動。檢查鏈接到其他答案來獲取圖片。如果你想掛鉤webapp的啓動,你通常使用'contextInitialized()'。如果你想掛鉤servlet的啓動,你通常使用'init()'。這就是全部。如果你甚至不知道你自己的代碼應該做什麼,那麼我會再次思考一次(或者提出一個問題) – BalusC 2010-03-02 16:12:36
我將加載配置文件以便稍後用於每個請求。 – mebada 2010-03-02 16:23:57