我创建了一个 servlet,每次启动它时,都需要运行几个代码线程才能完成,然后才能接受任何传入的请求。线程可能需要几分钟才能完成,并且需要与数据库和文件系统进行大量交互。
我是编写 servlet 的新手,想知道插入此代码的最佳位置。即 servlet init() 方法是该代码的最佳(或适当)位置吗?
谢谢西蒙
_
我创建了一个 servlet,每次启动它时,都需要运行几个代码线程才能完成,然后才能接受任何传入的请求。线程可能需要几分钟才能完成,并且需要与数据库和文件系统进行大量交互。
我是编写 servlet 的新手,想知道插入此代码的最佳位置。即 servlet init() 方法是该代码的最佳(或适当)位置吗?
谢谢西蒙
_
对你来说幸运的是,有一个类可以进行这样的初始化。在您的 Web 应用程序中,添加一个实现 javax.servlet.ServletContextListener 的类。在您的 web.xml 中,您必须添加该侦听器类,以便 Web 容器知道运行它。
此时,您必须实现两个方法:contextInitialized 和 contextDestroyed。您可以保证它在您的 Web 应用程序开始时在接受请求之前准确启动一次,并且在结束时准确启动一次(假设没有严重错误)。
如果您想等待这些线程完成,请启动它们并使用 Thread.join 等待它们完成,这样您就不会在它们完成之前开始接受请求。
有关如何实现 ServletContextListener 的更多信息,请参阅此处以获取出色的示例。