我是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. Capistrano一次部署一臺服務器
- 3. 使用Aptana部署到Tomcat服務器
- 4. 使用MSBuild部署到服務器
- 5. Capifony + Symfony2的:使用帽錯誤部署到我的服務器
- 6. 使用IIS和Windows服務器部署我的網站到pulic
- 7. 部署後未找到gwt服務器
- 8. 使用JQuery調用服務器方法
- 9. 使用FlashDevelop部署到服務器和遠程調試?
- 10. VSTS - 無法部署到內部部署的Web服務器
- 11. Symfony服務僅在方法調用後才啓動
- 12. Maven在第一次運行後不部署應用程序/啓動服務器
- 13. 調用兩次的服務方法
- 14. 使用WAMP服務器在Windows服務器上部署laravel 5
- 15. 僅從類中調用一次方法
- 16. MeteorJS Meteor從服務器到服務器的方法調用
- 17. 如何使@Schedule方法一次僅調用一次
- 18. 有沒有一種方法可以在服務於Nexus發佈時使用Cargo部署到JBOSS服務器?
- 19. 僅在第一次調用Rspec時使用存根方法
- 20. 無法使用詹金斯部署WAR到遠程服務器
- 21. Servlet.doPost()僅在服務器收到完整請求後才調用
- 22. 使用Git我的Node.js應用程序部署到我的生產服務器
- 23. maven部署到服務器
- 24. ASP.NET部署到服務器
- 25. CDbCommand部署到服務器
- 26. 在viewDidLayoutSubviews之後調用一次方法
- 27. 在使用$ timeout的服務中不會僅調用一次回調函數
- 28. 部署到另一臺服務器
- 29. 如何確保一次僅調用一次asmx Web服務?
- 30. WCF服務方法調用兩次
感謝, ,,那麼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