4

最も奇妙な Tomcat エラーが発生します。Tomcat を使用してポート 8080 のローカルホストで Web アプリを実行していますが、すべて正常に動作しているように見えますが、エラーなどはありません。ただし、HttpURLConnection クラスを使用して別のアプリからこの Web アプリにアクセスしようとすると、404 エラーが発生します。奇妙な点は、ブラウザに同じ URL を入力すると、200 コードが返され、有効な応答が返されることです。

これらの投稿から次のことを試し/確認しました:post1およびpost2

  1. User AgentおよびAcceptヘッダーの設定。
  2. 応答本文を確認したところ (404 が不適切なリターン コードであった場合は と を使用HttpURLConnection.getInputStream()) HttpURLConnection.getErrorStream()、実際にページが見つからないという応答が返されました。
  3. をandに設定しようとしconnection.setDoOutput()ましたが、役に立ちませんでした。truefalse
  4. に変更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
4

3 に答える 3

4

そのため、Eclipse から実行されている Tomcat をシャットダウンし、アプリケーションとブラウザーの要求を再試行することで、何らかのプロセスが要求を盗んでいることがわかりました。

netstat -nao | find "8080"Windows またはnetstat -nap | grep 8080Linux で実行することにより、泥棒を見つけることができます。LISTENINGandの行が表示され127.0.0.1:8080、次がプロセス ID になります。

于 2013-07-02T23:18:55.297 に答える
0

私は同じエラーに遭遇し、その理由を得ました.jdbc configureのユーザー名は、ネットワークアドレス、つまり192.168でmysqlにアクセスするようにバインドされていました。. localhost の代わりに、ユーザー名を変更して成功しました。

于 2016-08-05T05:32:33.137 に答える