1

シナリオで問題を説明しましょう:

1)ユーザーは私のページ「www.proxy4html.com」にアクセスし、フォームに記入します:

            web-address: |www.google.co.in |

2) [送信] をクリックします。

3) ブラウザのアドレスバーに「www.proxy4html.com」を含む Google ホームページを取得します。

Web からコンテンツを取得するために、java.net.HttpURLConnectionを使用しています (これを解決するために、他のいくつかのオプションも試しました)。スタンドアロンで実行する場合、コードは期待どおりに機能します

(つまり、 public static void main(String...)..スレッドを実行しているときに、指定された Web アドレスの html が何であれフェッチされます)。

しかし、スローするサーブレット環境で実行する場合も同じです

java.net.ConnectException: 接続タイムアウト: 接続

コードは次のとおりです。

public void write(String urlString, PrintWriter writer) {
    URL url;
    try {
        url = new URL(urlString);
        HttpURLConnection huc = (HttpURLConnection) url.openConnection();
        HttpURLConnection.setFollowRedirects(false);
        huc.setConnectTimeout(15 * 1000 * 60);
        huc.setReadTimeout(15 * 1000 * 60);
        huc.setRequestMethod("GET");

        huc.connect();
        InputStream input = url.openStream();
        logger.info("got input stream");//I never reach here in servlet env :(              
        int i = 0;
        while((i = input.read()) != -1) {
            writer.write(i);
            System.out.print((char)i);
        }

        input.close();
    } catch (ConnectException e) {
        logger.log(Level.SEVERE, "", e);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

上記のコード例はきれいに見えないかもしれませんが、上記のメソッドが適切なURL (および任意の出力ストリーム) を渡してサーブレットから呼び出されると、接続が確立されないことに注意してください。

これはすべて、企業ネットワークにあるローカルマシン上のTomcatで実行しています(同じコードがpsvmainで実行されているため、ファイアウォールに関する結論は得たくないかもしれません)。

助けてください....

前もって感謝します。

編集:家で同じことを試してみましたが、期待どおりにうまくいきました。この質問は、Java ではなくオペレーティング システムのドメインに当てはまると思います。だから私はもう一度私の質問を言い換えたいと思います:

  • オペレーティング システム (Windows 7) が何らかの形で tomcat による Http リクエストの作成を妨げていますか?
  • アプリケーションがブラウザ以外のHttpリクエストを作成できないようにするWindows 7の下の構成はありますか?
  • Mozilla Firefox (インストールではなくコピーされたディレクトリから実行しています。つまり、管理者権限がなく、ウィンドウ レジストリがない可能性があります) が定期的に更新できないことがあります。
4

1 に答える 1

0

これはファイアウォールの問題ではないと主張したいのは理解できますが (同じコードがスタンドアロンの Java プログラムとしても問題なく動作するため)、ここで危険を冒しても構わないと思っています。

両方のケース (スタンドアロンのケースと Tomcat のケース) でまったく同じコードが実行されていることが確実な場合でも、ファイアウォールの問題である可能性があります。

Windows 7 の組み込みファイアウォールは、ポートごとのプロセスごとにアウトバウンド ルールを割り当てます。スタンドアロン プログラムはアウトバウンド アクセスが許可されている JVM で実行されているのに、Tomcat サーバーはアウトバウンド アクセスが許可されていない JVM で実行されている可能性はありますか?

言い換えれば、スタンドアロン プログラムと Tomcat サーバーがまったく同じ JVM で実行されているという確信はありますか? まったく同じjava.exe?Windows では、スタンドアロン プログラムが実際に によって実行されている可能性がありますjavaw.exe

(ファイアウォールを完全に無効にしようとしたかどうかについては言及していませんでした。ファイアウォールを完全に無効にできる場合は、トラブルシューティングの目的で無効にすることをお勧めします)

于 2012-11-16T08:16:48.477 に答える