Java 我想使用一个在部署到服务器后只调用一次的方法
我是个新手。我想使用一个在部署到服务器后只调用一次的方法。我看了看。但我发现每次请求都会调用它。我误解了吗?Java 我想使用一个在部署到服务器后只调用一次的方法,java,servlets,initialization,Java,Servlets,Initialization,我是个新手。我想使用一个在部署到服务器后只调用一次的方法。我看了看。但我发现每次请求都会调用它。我误解了吗?init()的替代方案是什么?init()仅在创建servlet时调用。这可能在服务器的生命周期内发生多次。您可以使用它初始化常规使用servlet所需的任何变量或逻辑 编辑: 在重读您的帖子之后,从技术上讲,它不会随每个请求一起调用,因为服务器正在为每个请求创建一个新的servlet实例。检查您的服务器设置,以确定它是否将获得一个新的servlet,即在服务器的生命周期内保留一个serv
init()
的替代方案是什么?init()
仅在创建servlet时调用。这可能在服务器的生命周期内发生多次。您可以使用它初始化常规使用servlet所需的任何变量或逻辑
编辑:
在重读您的帖子之后,从技术上讲,它不会随每个请求一起调用,因为服务器正在为每个请求创建一个新的servlet实例。检查您的服务器设置,以确定它是否将获得一个新的servlet,即在服务器的生命周期内保留一个servlet。您是否正在寻找ServletContextListener
否,不会在每个请求中调用它。它只在servlet初始化期间调用,而servlet在webapp的生命周期中通常只发生一次。另请参阅,了解有关如何创建和执行servlet的更多详细信息 如果您确实想要执行一些全局/应用程序范围的初始化(因此,它本身并不只绑定到特定的servlet),那么您通常会使用。您可以在
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>
com.example.Config
谢谢,,,那么contextInitialized和init()之间的主要区别是什么,应该首先运行什么?在webapp启动时执行ServletContextListener#contextInitialized()。在servlet启动时执行HttpServlet#init()
。我认为现在对您来说应该很明显,当webapp还没有启动时,servlets无法初始化/启动。检查到其他答案的链接以获得图片。如果要挂接webapp的启动,通常使用contextInitialized()
。如果要挂接servlet的启动,通常使用init()
。就这些。如果您甚至不知道自己的代码应该做什么,那么我会再次考虑(或问一个问题),我将加载配置文件,以便以后在每个请求中使用。如果这是在应用程序范围内使用的,那么请使用ServletContextListener
。如果servlet要专门使用它,则使用HttpServlet\init()
。非常感谢你的回复