Java Tomcat 从线程初始化 servlet

Java Tomcat initialize a servlet from a thread

我有一个 Tomcat 7 应用程序,它在启动时启动一个线程,在做了一些事情之后我想调用 "something" 到 initialize/start 一个部署在 [=18 上的 servlet =].

有什么想法吗?

Servlet 由 servlet 容器以两种方式之一初始化:

  1. 启动时,如果 servlet 被标记为 loadOnStartup,那么它将在部署 war 文件时被初始化

  1. 第一次请求时

如果您的 servlet 未标记为在启动时加载,则只需从您的线程向您的 servlet 发送一个 Http 请求。您可以使用 HttpURLConnection 或任何类似的 API 来做到这一点。

解决方法如下:

 private boolean startup() throws ClientProtocolException, IOException {
   logger.entry();

   HttpPost request = new HttpPost("http://.../StartupServlet");

  RequestConfig requestConfig = RequestConfig.custom()
           .setSocketTimeout(30 * 1000)
           .setConnectionRequestTimeout(30 * 1000)
           .setConnectTimeout(30 * 1000)
           .build();
  request.setConfig(requestConfig);

  CloseableHttpClient client = HttpClients.createDefault();
  CloseableHttpResponse response = client.execute(request);

  if (HttpStatus.SC_OK != response.getStatusLine().getStatusCode()) {
     return false;
  }

  logger.exit();
  return true;
}