• 締切済み

strutsでのgetInputStream

お世話になります。 早速なのですがちょっと困っていて知ってる方いたら教えていただきたいと思います。 現在 strutsのactionからhttpの内容を全て取り出すプログラムを 作成しています。 httpヘッダーに関しては問題なく取得できたのですが httpのボディ部をHttpServletRequest.getInputStream()で取得 しようとしてもバイト長が-1で返ってきてしまい読み込めません でした。 読み込もうとしている値はテキストです。 (キ-=値の形式ではないので、getInputStreamでやっています。) プログラムを抜粋して載せさせていただきます。 ------------------------------------------------------- public class TestAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionFormform,HttpServletRequest request, HttpServletResponse response) { try{ ServletInputStream sis = request.getInputStream(); byte[] bytes = new byte[1024]; String is=""; while(true){ int len = (sis.readLine(bytes,0,1024)); System.out.println("read length: " + len);←ここで-1が返ってくる。 if(len == -1){ break; } } }catch(Exception e){ e.printStackTrace(); } return null; } } ----------------------------------------------- どうぞよろしくお願いしますm(__)m

みんなの回答

回答No.1

HTTPクライアントの方は自作しているんでしょうか。 やりがちなミスをいくつか参考までに挙げます。 ・HTTPリクエストのメソッドをGETにしてしまう。   → POSTにする。 ・Content-Lengthヘッダをつけ忘れる。   → Content-Lengthは必ずつける。 ・Content-Typeヘッダを「application/x-www-form-urlencoded」にしてしまう。   → Content-Typeは付けないか、text/plainなどにする。 ブラウザからフォーム経由でPOSTリクエストを送ると、Content-Typeヘッダが「application/x-www-form-urlencoded」になるので、「-1」になると思われます。

mako_seven
質問者

お礼

fdsjaklfjasさん、回答ありがとうございました。 教えていただいたとおりクライアントを自作したら すんなり取る事ができました。 ご指摘いただいたとおりブラウザからPostで送ってテストをしていたのでいかなかったみたいです。

すると、全ての回答が全文表示されます。

関連するQ&A