Java Tomcat 从线程初始化 servlet
Java Tomcat initialize a servlet from a thread
我有一个 Tomcat 7 应用程序,它在启动时启动一个线程,在做了一些事情之后我想调用 "something" 到 initialize/start 一个部署在 [=18 上的 servlet =].
有什么想法吗?
Servlet 由 servlet 容器以两种方式之一初始化:
- 启动时,如果 servlet 被标记为 loadOnStartup,那么它将在部署 war 文件时被初始化
或
- 第一次请求时
如果您的 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;
}
我有一个 Tomcat 7 应用程序,它在启动时启动一个线程,在做了一些事情之后我想调用 "something" 到 initialize/start 一个部署在 [=18 上的 servlet =].
有什么想法吗?
Servlet 由 servlet 容器以两种方式之一初始化:
- 启动时,如果 servlet 被标记为 loadOnStartup,那么它将在部署 war 文件时被初始化
或
- 第一次请求时
如果您的 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;
}