- PR -

HttpServletRequestの値取得(getとpost)

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 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によって
値が取れたり取れなかったりしたことの原因は何かと思っています。
よろしければアドバイスをお願い申し上げます。
米山@クロノス
大ベテラン
会議室デビュー日: 2003/06/10
投稿数: 103
お住まい・勤務地: 大阪市淀川区西中島4-13-22 新大阪淀川ビル5F
投稿日時: 2006-01-23 18:00
こんにちは。米山@クロノスです。

getParameterValuesメソッドの挙動は、HTTPのリクエスト・メソッドが
GETだろうがPOSTだろうが変わりませんよ。

サーブレットのdoPostメソッドはちゃんと実装できていますか?
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 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

何かアドバイスがありましたら
何卒宜しくお願い申し上げます。
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2006-01-24 11:14
・環境は正確に。
クライアントのOSだけでなく、ブラウザ、サーバのOS、Javaのバージョン、アプリケーションサーバのバージョンも書く。
サードパーティのライブラリ、フレームワークを使用しているのなら、それも書く。

・情報の後出しはしないこと。
マルチパートリクエストを使っているならはじめからそう書く。

・コードは正確に。
面倒でもあなたが書いたコードを正確に書く。第3者はコードを読む以外にあなたが行ったことを知るすべはない。不慣れな人物の書いたサマリは多くの場合役に立たない。

多分マルチパートリクエストの処理の仕方が変なんじゃないんですかね。
正確な情報を得られないので当てずっぽうですが。
ふく
常連さん
会議室デビュー日: 2005/11/15
投稿数: 25
投稿日時: 2006-01-24 11:48
こんにちは。

> Windowsでテストを行っていた頃、postメソッドを利用すると
> この値が取れませんでした。(変数testはnull)
> ためしにgetメソッドを利用すると
> 想定どおり値が取得できました。
<form>タグにmethod="post"と設定すればdoPostで取得できますよ。
methodをgetか省略するとdoGetで取得されます。
getとpostの違いを調べればちゃんと理解できると思います。

がんばってください。
おっきー
大ベテラン
会議室デビュー日: 2003/05/01
投稿数: 104
投稿日時: 2006-01-24 12:36
ファイルのアップロードをしないのであれば、
form タグの enctype パラメータを削除すればうまくいきますよ。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-01-24 12:48
とりあえず、サーブレットの処理を書いている場所がserviceメソッドなら、
getでもpostでも同じです。

それから、OSの違いではなくブラウザの違いかもと思います。
ブラウザも上げてみると、他の人がチェックしやすいかも。
未記入
ベテラン
会議室デビュー日: 2005/04/16
投稿数: 51
投稿日時: 2006-01-24 19:57
お世話になっております。
全くレベルの低い話で恐縮ですが、
結果報告させてください。

Windowsでpostメソッドを使うとNG、GetならOKになったり
MacではどちらもNGだったりしたことの原因は、
ひとえに私が不注意から
JSPのFORMタグにenctype=multipart/form-dataと指定していたからでした。

ご回答くださいまして本当にどうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)