我收到了最奇怪的Tomcat错误。我有一个在我的localhost上使用tomcat在端口8080上运行的Web应用程序,一切似乎运行良好,没有错误等。但是,当我尝试使用HttpURLConnection类从另一个应用程序访问此Web应用程序时,我收到404错误。奇怪的是,当我在浏览器中放入相同的URL时,它返回200个代码并具有有效的响应。
我已尝试/检查了以下帖子中的以下内容:post1和post2
User Agent
和Accept
标题。HttpURLConnection.getInputStream()
以及HttpURLConnection.getErrorStream()
,如果404是一个不正确的返回代码),我确实收到了一个找不到回复的页面。connection.setDoOutput()
设置为true
和false
,但它没有帮助。localhost
更改为127.0.0.1
。更多信息,我查看了Tomcat
访问日志,看来请求永远不会访问服务器(意味着请求永远不会被记录)。但是,当我将url放入浏览器(并获得有效响应)时,请求会显示在日志中。
还有一件事,我正在使用eclipse运行tomcat。是的,该应用程序正在服务器上部署。
此外,我发现有人似乎遇到了完全相同的问题 here ,但是没有解决方案,所以我将问题提交给SO社区!
编辑:来自app的代码:
出于隐私原因,我保留了隐藏的网址
public static void main(String[] args) {
final String url = "";
try {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoOutput(false);
System.out.println(con.getResponseCode());
System.out.println(getStringFromInputStream(con.getInputStream()));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("DONE");
}
是的,这适用于谷歌等其他主机。我从http://www.google.com
得到的回答是:
200
<!doctype html><html....>*bunch of html*</html>
DONE
回复http://localhost:8080/...
:
404
java.io.FileNotFoundException: *url*
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1674)
at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1672)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1670)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1243)
at Get.main(Get.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.io.FileNotFoundException: *url*
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1623)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at Get.main(Get.java:31)
... 5 more
DONE
答案 0 :(得分:3)
因此,通过关闭从Eclipse运行的Tomcat并重试应用程序和浏览器请求,我们发现某些进程正在窃取您的请求。
您可以通过在Windows上运行netstat -nao | find "8080"
或在Linux上运行netstat -nap | grep 8080
来找到小偷。它应显示LISTENING
和127.0.0.1:8080
的行,然后是流程ID。
答案 1 :(得分:0)
我遇到同样的错误,并且得到了原因,jdbc configure中的用户名绑定到使用网络地址访问mysql,即:192.168。。而不是localhost,我更改用户名并成功
答案 2 :(得分:0)
我有完全相同的问题,当我从浏览器运行https://127.0.0.1时,它可以正常工作,但是浏览器中的https:// localhost或http:// localhost:8080和Eclispe无法正常工作。我刚刚在Windows上尝试过netstat -nao | find“ 8080”,我得到了以下
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 30748
TCP 25.208.159.83:64002 165.225.39.27:8080 TIME_WAIT 0
TCP 25.208.159.83:64037 165.225.39.27:8080 TIME_WAIT 0
TCP 25.208.159.83:64117 165.225.39.27:8080 TIME_WAIT 0
TCP 25.208.159.83:64197 185.46.212.88:8080 SYN_SENT 11044
TCP 25.208.159.83:64200 165.225.39.27:8080 TIME_WAIT 0
TCP [::]:8080 [::]:0 LISTENING 30748