最も奇妙な Tomcat エラーが発生します。Tomcat を使用してポート 8080 のローカルホストで Web アプリを実行していますが、すべて正常に動作しているように見えますが、エラーなどはありません。ただし、HttpURLConnection クラスを使用して別のアプリからこの Web アプリにアクセスしようとすると、404 エラーが発生します。奇妙な点は、ブラウザに同じ URL を入力すると、200 コードが返され、有効な応答が返されることです。
これらの投稿から次のことを試し/確認しました:post1およびpost2
User Agent
およびAccept
ヘッダーの設定。- 応答本文を確認したところ (404 が不適切なリターン コードであった場合は と を使用
HttpURLConnection.getInputStream()
)HttpURLConnection.getErrorStream()
、実際にページが見つからないという応答が返されました。 - をandに設定しようとし
connection.setDoOutput()
ましたが、役に立ちませんでした。true
false
- に変更
localhost
してみました127.0.0.1
。
アクセスログを調べたTomcat
ところ、リクエストがサーバーにヒットしていないようです(つまり、リクエストがログに記録されません)。ただし、URL をブラウザーに入力すると (そして有効な応答を取得すると)、要求がログに表示されます。
もう1つ、Eclipseを使用してTomcatを実行しています。はい、アプリはサーバーにデプロイされています。
また、ここでまったく同じ問題を抱えているように見える人を見つけましたが、解決策がないため、SO の素晴らしいコミュニティに質問を持ち込んでいます!
編集:呼び出し元のアプリからのコード:
個人情報保護のため、URLは非表示にしています
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");
}
はい、これは google などの他のホストでも機能します。私が得る応答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