2011-10-15 8 views
6

別のサーブレットからサーブレットPOSTメソッドを呼び出し、サーブレットパラメータにblobを渡す必要があります。これが可能かどうか、それはどうやって実現できるのでしょうか? PS:Apache HTTPクライアントを使用できない別のサーブレットからサーブレットポストを呼び出す

+0

Apache HttpClientはオープンソースです...コピーして貼り付けますか? –

+0

Google App Engineを使用しているため、使用できるクラスに制限があります。 – fernandohur

答えて

8

HTTPリクエストを自分で作成して送信する必要があります。メソッドをGETからPOSTに変更し、multipart/form-dataリクエストを送信したいので、forward/redirect/includeを使用することはできません。

HttpClient(およびその他のサードパーティのライブラリ?)は明らかにオプションではないため、java.net.URLConnectionの標準Java SE APIを使用することをお勧めします。長い話短い:Using java.net.URLConnection to fire and handle HTTP requests下部にmultipart/form-dataの例があります。

この問題は、サーブレットに固有の問題ではないことに注意してください。つまり、main()メソッドを持つプレーンなバニラJavaアプリケーションでこのコードを実行できる必要があります。これにより、テストと微調整が容易になります。いったん動作させると、サーブレットは同じコードを実行させます。問題の無関係


、私は両方のサーブレットが同じwebアプリケーションのコンテキストで実行確かならば、どこかの主要な設計ミスがあることを印象を持っています。 POSTリクエストを送信したい他のサーブレットは、明らかに緊密に結合されているため、リファクタリングする必要があります。

1

あなたのアプリケーションから別のWebサービスに電話することを意味しますか?もしそうなら、HttpClientのようなものがあなたの望むものです。アプリで別のサーブレットをプログラムで呼び出す場合は、forward to itまたはinclude itのいずれかを探していることを意味します。

+0

私のアプリ内で別のサーブレットを呼びそそうとしていますが、POSTメソッドでなければなりません。私が通常やっているのはresponse.redirect(...)ですが、これはGETメソッドを呼び出します...どうすればPOSTを呼び出せますか? – fernandohur

+0

私が言ったこと:あなたがしようとしていることに応じて、フォワードまたはインクルード。詳細は、JEEチュートリアルの[他のWebリソースの呼び出し](http://download.oracle.com/javaee/6/tutorial/doc/bnagi.html)を参照してください。 –

7

ディスパッチャをアプリケーション内の別のサーブレットに取得し、それを転送するか、@ Ryanが示唆するようにインクルードすることができます。コードは、最初のサーブレットの内部で次のようにする必要があります。

ServletContext context = this.getServletContext(); 
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet"); 

// change your request and response accordingly 

dispatcher.forward(request, response); 
+0

私の必要なのは、アプリケーションの別のサーブレットでPOSTメソッドを呼び出すことです。それは "otherurltoservlet"のPOSTメソッドを呼び出しますか? – fernandohur

+0

私は、最初のサーブレットがpost経由で呼び出された場合、2番目のサーブレットはdispatcher.forwardチェーンのpost経由で呼び出されると考えています。 – rmarimon

+0

ここからPOSTへのGETについての質問をご覧くださいhttp://stackoverflow.com/questions/4374548/does-jspforward-or-requestdispatcher-forward-use-get-or-post – rmarimon

関連する問題