こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2006-11-27 07:12:43

QNo.2565007

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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」になると思われます。

投稿日時 - 2006-11-27 15:43:34

お礼

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

投稿日時 - 2006-11-30 01:21:20

あなたにオススメの質問