我对网络开发不是很有经验,所以这可能是初学者的问题。我有一个小项目,在Tomcats上的两台独立机器上有两个Java Web应用程序,一个面向用户(前端,FE应用程序)并与另一个(后端,BE应用程序)通信。 BE通过TCP与FE通过REST API与数据库进行通信。问题是FE应用程序中使用的Apache HttpGet有时会到达BE应用程序,但通常在FE上我得到UnknownHostException。与浏览器进行通信或直接从浏览器直接定位BE REST API始终有效。
我应该查看哪些日志,以及如何设置Tomcats?默认的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);
...
答案 0 :(得分:0)
根据您的问题,您的错误消息是“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的更多详细信息:
答案 1 :(得分:0)
原来问题是关于记事本保存带有BOM的UTF-8属性文件。然后发生了什么,找不到识别主机的属性,因此解析主机" null"导致例外。