在初始化所有 servlet 后,如何在 Java Webapp 中执行一次性操作?

How do I perform one time actions in a Java Webapp AFTER all servlets have been initialized?

我有一个标准的 Java 11 Web 应用程序,其中包含多个 servlet。一些 servlet 是由库导入的,其他的是在应用程序本身中编写的。

我需要在所有 Web servlet 初始化之后执行任务,最好是在任何请求进入之前。该任务需要访问 ServletContext。

我已经尝试通过创建 ServletContextListener 及其对应的 contextInitialized 方法来执行此操作,但这会在 servlet 初始化之前执行任务。

我无法将任务添加到最后一个要加载的 servlet,因为最后一个加载的 servlet 是从外部库导入的。

如果解决方案不涉及创建没有映射的 servlet,那将是更好的选择。

如果您有权访问您的部署描述符 (web.xml) 并且 servlet 是预先加载的,那么您可以将您的 servlet 添加到 servlet 列表中并设置一个load-on-startup 元素中的高数字。

<servlet>  
    <servlet-name>myServlet</servlet-name>  
    <servlet-class>com.project.LastServlet</servlet-class>  
    <load-on-startup>99</load-on-startup>  
</servlet>

我试图在 documentation, but I couldn't find it and the ServletContextListener is a no go 中找到解决方法: “在初始化 Web 应用程序中的任何过滤器或 servlet 之前,所有 ServletContextListener 都会收到上下文初始化通知。”