我有一个标准的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>
我试图在文档中找到一个解决方案,但我找不到它,ServletContextListener是一个不去:在web应用程序中的任何过滤器或servlet初始化之前,所有ServletContextListeners都会收到context初始化的通知。