我对Web开发的经验不是很丰富,所以这可能是初学者的问题。我有一个小项目,在Tomcat的两台独立计算机上有两个Java Web应用程序,一个面向用户(前端,FE应用程序),与另一个用户通信(后端,BE应用程序)。 BE通过TCP与DB通信,并通过REST API与FE通信。问题是,FE应用程序中使用的Apache HttpGet有时仅到达BE应用程序,但通常在FE上,我会收到UnknownHostException。与数据库进行BE通信或直接从浏览器定位BE REST API始终有效。

我应该查看哪些日志,应该如何设置Tomcat?默认的Tomcat日志记录不会提供很多信息,但是我想这是Tomcat的配置问题,因为防火墙已关闭,所有其他TCP通信都正常进行。以下是我(非常香草)对Apache HttpGet的用法:

...
    String url = String.format("http://%s/AutoexcludedDBService/nacionalidades", properties.getProperty("dbWebService"));
    CloseableHttpClient client = HttpClients.createDefault();
    CloseableHttpResponse response = null;
    String json = null;
    StatusLine statusLine = null;

    try {
        HttpGet request = new HttpGet(url);
        //request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
        request.addHeader("accept", "application/json");
        request.addHeader("User-Agent", HTTP.USER_AGENT);
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(10000).setConnectTimeout(10000).setSocketTimeout(10000).build();
        request.setConfig(requestConfig);
        response = client.execute(request);


...

最佳答案

根据您的问题,您的错误消息是“ java.net.UnknownHostException”。

从文档中:https://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html

Thrown to indicate that the IP address of a host could not be determined.


此错误消息表明问题出在主机%s的名称解析上。

因此,看来您的问题应该是“为什么主机%a无法解析主机%s的名称”(以xy%的百分比表示)。

使用操作系统的所有其他相关详细信息,该问题不适合stackoverflow,而是适合serverfault.com。

但是,在此发布之前,您应该检查google搜索结果是否适合您的操作系统:“ os_name_here主机无法解析名称”

如果您不确信问题是由于操作系统引起的,而是由于HttpClient引起的,则可以将Apache HttpComponents的源添加到您的项目中,并在引发UnknownHostException的行中,打印完整的堆栈跟踪,而不是在该行中添加更多日志记录。

还有另一个线程可以弄清楚如何获取有关UnknownHostException的更多详细信息:

How to know the cause of UnknownHostException?

09-27 17:31