Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我想使用一个在部署到服务器后只调用一次的方法_Java_Servlets_Initialization - Fatal编程技术网

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()
。非常感谢你的回复