在 JAVA 中使用注释在启动时加载

2022-09-03 05:55:56

我有这个代码,

@WebServlet(value="/initializeResources", loadOnStartup=1)
public class InitializeResources extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      System.out.println("HEREEEE");
  }

}

但是 servlet 不会在 Web 应用程序启动时启动。

如何在 Servlet Annotation 上使用 load on startup?

我的 Servlet API 是 3.0,我使用 Tomcat 7


答案 1

使用当前代码,您需要执行GET请求才能看到输出。HEREEEE

如果你想在 servlet 启动时做一些事情(即值大于或等于零的元素 loadOnStartup),你需要将代码放在 init 方法或 servlet 的构造函数中:0

@Override
public void init() throws ServletException {
    System.out.println("HEREEEE");
}

使用侦听器在应用程序范围(在 中)启动资源可能更方便。ServletContext

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class InitializeListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("On start web app");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("On shutdown web app");
    }

}

有关示例,请参阅我对 JAX-RS 请求之间共享变量问题的回答。


答案 2
@WebServlet(name="InitializeResources", urlPatterns="/initializeResources", loadOnStartup=1)

urlPatterns,以确保 Web conatainer 找到 servlet 路径。


推荐