- - PR -
HttpServletRequestの値取得(getとpost)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-01-23 16:01
お世話になっております。
JSPで<INPUT TYPE="checkbox" NAME="test" VALUE="test"> とし、Servletで String[] test = request.getParameterValues("test"); として値を取得したいと思っています。 ところが、 Windowsでテストを行っていた頃、postメソッドを利用すると この値が取れませんでした。(変数testはnull) ためしにgetメソッドを利用すると 想定どおり値が取得できました。 getとpostとの違いは 単にURLに値が入るか入らないか程度と思っていたのですが、 何がこのような結果をもたらすのでしょうか。 次にOSをMacに変えてみました。 するとgetでもpostでも同様に値が取得できないのです。 (変数testがnull) どのようにしてこの問題を解決すればよいでしょうか? また何故nullになってしまうのか、 Windowsではget/postによって 値が取れたり取れなかったりしたことの原因は何かと思っています。 よろしければアドバイスをお願い申し上げます。 |
|
投稿日時: 2006-01-23 18:00
こんにちは。米山@クロノスです。
getParameterValuesメソッドの挙動は、HTTPのリクエスト・メソッドが GETだろうがPOSTだろうが変わりませんよ。 サーブレットのdoPostメソッドはちゃんと実装できていますか? |
|
投稿日時: 2006-01-24 10:19
お世話になっております。
doGetにしてURLの「?」以降を確認してみました。 (下 参照ください。) チェックボックスのNAMEは「file_list」で チェックを入れたファイル名(「File1.csv」「File2.csv」)はどちらも渡ってきています。 NAME=「download」はsubmitボタンです。 気になっているのは、 %0D%0A(改行コード)が入っていることです。 開発はWindowsで行い、 媒体でMacにコピーして実行した結果です。 【URL「?」以降】 ------------0xKhTmLbOuNdArY%0D%0AContent-Disposition:%20form-data;%20name=%22file_list%22%0D%0A%0D%0AFile1.csv%0D%0A------------0xKhTmLbOuNdArY%0D%0AContent-Disposition:%20form-data;%20name=%22file_list%22%0D%0A%0D%0AFile2.csv%0D%0A------------0xKhTmLbOuNdArY%0D%0AContent-Disposition:%20form-data;%20name=%22download%22%0D%0A%0D%0Aダウンロード%0D%0A------------0xKhTmLbOuNdArY--%0D%0A 何かアドバイスがありましたら 何卒宜しくお願い申し上げます。 |
|
投稿日時: 2006-01-24 11:14
・環境は正確に。
クライアントのOSだけでなく、ブラウザ、サーバのOS、Javaのバージョン、アプリケーションサーバのバージョンも書く。 サードパーティのライブラリ、フレームワークを使用しているのなら、それも書く。 ・情報の後出しはしないこと。 マルチパートリクエストを使っているならはじめからそう書く。 ・コードは正確に。 面倒でもあなたが書いたコードを正確に書く。第3者はコードを読む以外にあなたが行ったことを知るすべはない。不慣れな人物の書いたサマリは多くの場合役に立たない。 多分マルチパートリクエストの処理の仕方が変なんじゃないんですかね。 正確な情報を得られないので当てずっぽうですが。 |
|
投稿日時: 2006-01-24 11:48
こんにちは。
> Windowsでテストを行っていた頃、postメソッドを利用すると > この値が取れませんでした。(変数testはnull) > ためしにgetメソッドを利用すると > 想定どおり値が取得できました。 <form>タグにmethod="post"と設定すればdoPostで取得できますよ。 methodをgetか省略するとdoGetで取得されます。 getとpostの違いを調べればちゃんと理解できると思います。 がんばってください。 |
|
投稿日時: 2006-01-24 12:36
ファイルのアップロードをしないのであれば、
form タグの enctype パラメータを削除すればうまくいきますよ。 |
|
投稿日時: 2006-01-24 12:48
とりあえず、サーブレットの処理を書いている場所がserviceメソッドなら、
getでもpostでも同じです。 それから、OSの違いではなくブラウザの違いかもと思います。 ブラウザも上げてみると、他の人がチェックしやすいかも。 |
|
投稿日時: 2006-01-24 19:57
お世話になっております。
全くレベルの低い話で恐縮ですが、 結果報告させてください。 Windowsでpostメソッドを使うとNG、GetならOKになったり MacではどちらもNGだったりしたことの原因は、 ひとえに私が不注意から JSPのFORMタグにenctype=multipart/form-dataと指定していたからでした。 ご回答くださいまして本当にどうもありがとうございました。 |
1