【问题标题】:Java Tomcat initialize a servlet from a threadJava Tomcat 从一个线程初始化一个 servlet
【发布时间】:2015-02-19 09:32:06
【问题描述】:

我有一个 Tomcat 7 应用程序,它在启动时启动一个线程,在做了一些事情之后,我想调用“某事”来初始化/启动一个部署在 Tomcat 上的 servlet。

有什么想法吗?

【问题讨论】:

  • 为什么要自己“初始化”一个servlet?有什么特别的原因吗?当你初始化一个 servlet 时你想做什么?
  • 如果你使用监听器来监听应用程序的启动,服务器肯定会等待它完成后再初始化servlet。所以,你可能不需要做任何事情。 docs.oracle.com/javaee/6/api/javax/servlet/…

标签: java multithreading tomcat7 servlet-3.0


【解决方案1】:

Servlet 由 Servlet 容器通过以下两种方式之一进行初始化:

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

  1. 第一次请求时

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

【讨论】:

  • 是的,请参阅下面的解决方案。谢谢!
  • @SebastianS。它达到你的目的了吗?
【解决方案2】:

解决办法如下:

 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;
}

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 2011-07-30
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多