我是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