7

Web サービスの名前を取得し、リクエストを外部 Web サービスに転送できるサーブレットを開発しています。次に例を示します。http://www.webservice.com/...

応答出力をインターセプトする応答ラッパーを作成しましたが、要求を外部 Web サービスに転送できません。要求を同じサーバー上のサーブレットにリダイレクトする場合にのみ機能します。

例:

request.getRequestDispatcher("aMyServlet").forward(request, response) // WORKS
 request.getRequestDispatcher("http://www.webservice.com/...").forward(request, response)

http://www.webservice.com/...Tomcatはサーバー上でローカル リソースとして検索するため、そうではありません。

外部リクエストを行うにはどうすればよいですか?

ありがとう

4

3 に答える 3

4

forward使用しているメソッドは、サーバー リソース間の通信に使用されます (例: サーブレットからサーブレット) 別の場所にリダイレクトする場合は、そのHttpServletResponse's sendRedirectメソッドを使用できます。より良いオプションは、独自の HTTP 要求を実行し、結果をブラウザーにストリーミングすることです。これはそれよりも難しく聞こえます。基本的に java.net.HttpURLConnection、「リダイレクト」したい Web サイトの URL を使用して を作成します。ユーザーのブラウザーにも送信されず、ブラウザーの URL バーにも表示されないため、これには実際に (大きすぎない限り) クエリ パラメーターを含めることができます。接続を開き、コンテンツを取得して、サーブレットの OutputStream に書き込みます。

于 2010-05-17T20:31:55.167 に答える
2

外部サービスにリクエストを送信するには、明示的に新しい HTTP リクエストを作成し、そのレスポンスを処理する必要があります。HttpUrlConnectionクラスを見てください。

于 2010-05-17T20:23:55.277 に答える
1

呼び出したいサービスの種類については言及していませんが、どちらにしても、サーブレットはサービス クライアントとして機能しているため、サービス クライアント テクノロジを検討する必要があります。

REST スタイルのサービスを呼び出す場合、java.net.URLまたはApache Commons HttpClientを使用して URL のリクエストを送信し、レスポンスを取得できます。

SOAP サービスを呼び出すには、 Apache AxisまたはJava WSITを使用できます。

于 2010-05-17T20:25:35.487 に答える