dポイントプレゼントキャンペーン実施中!

Servletで、Form内の任意の項目を取得する場合には、
「getParameter」 と 「getAttribute」があります。

この二つの違いとしては

getParameter
戻り値:String

なのに対して

getAttribute
戻り値:Object

という違いがあります。

感覚的には
getParameterも、getAttributeも、
Form内の任意の項目の値を取得する場合に
getParameter("項目名");
getAttribute("項目名");

という使い方で
「どちらでもHTML(JSP)のフォーム内のデータを取得できる」という感覚がありあます。

ちょっと上手く纏められず、前提が長くなってしまったのですが

【ご質問1】
getParameterとgetAttributeの、
決定的な違いとはなんなのでしょうか?

参考のURLにもあるように
「Parameter は request にユーザが乗せてきたもの。 」であり、
「Attribute は request 生成後に Servlet だか JSP だかがくっつけたもの。」であるという違いが決定的な違いでしょうか?

言い換えれば
Parameter は フォーム内のリクエストデータを受け、渡す役割をもつ、担当者であり
Attribute は フォーム内のリクエストデータを受け、加工し、渡す役割を持つ担当者である

ということでしょうか?

【ご質問2】
getAttributeがあるにも関わらず、
getParameterは何故存在するのでしょうか?
getAttributeは戻り値をObject型として戻りますが、String型にキャストしてやれば、それでgetParameterで取得した効果と同じ効果が得られるものだと思われるので
getParameterの存在理由が見出せないのですけども、getParameterはgetParameterで何か特別な役割をもっているのでしょうか?

【ご質問3】
フォーム内データを取得する場合、
「getParameter」でなければならないとか「getAttribute」を使用しなければならない、とかそういった決まりはありますでしょうか?


[参考URL]
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …

A 回答 (3件)

そもそも


>感覚的には
>getParameterも、getAttributeも、
>Form内の任意の項目の値を取得する場合に
>getParameter("項目名");
>getAttribute("項目名");
>
>という使い方で
>「どちらでもHTML(JSP)のフォーム内のデータを取得できる」という感覚がありあます。
という「感覚」が間違ってる。

getParameterはURL引数であり、getAttributeはリクエストに設定できる属性。
例えば、HTMLのFORMでURL引数に項目名:「hoge_name」、値:「hoge_value」を設定した場合、
ServletでgetParameter("hoge_name")の戻り値は「"hoge_value"」、
getAttribute("hoge_name")の戻り値は「null」。

質問1
決定的な違いは、「そもそも違う物。」

質問2
そもそも違うものなのでgetParameterがないと困る。
「特別」な役割かどうかは不明だが、役割としては「URL引数を取得する。」です。

質問3
決まりはないが、getAttributeじゃ取得できません。

その他
自分の質問に対して「ご」をつけるのはやめた方がいいですよ。
    • good
    • 2
この回答へのお礼

ありがとうございます。
ご回答いただきました内容分り易かったです。

>例えば、HTMLのFORMでURL引数に項目名:「hoge_name」、値:「hoge_value」を設定した場合、
>ServletでgetParameter("hoge_name")の戻り値は「"hoge_value"」、getAttribute("hoge_name")の戻り値は「null」。

すみません。
扱い方について勘違いしていたみたいです。

---------------------------------------------
JSP

↓ Formデータ送信

Servlet
1.String aaa = request.getParameter("aaa");出取得
2.request.setAttribute("aaa" aaa);

↓ JSP呼び出し

JSP
3.request.getAttribute("aaa");
---------------------------------------------

とフォームのnameと、
setAttributeで設定する名前を同一で受け取りしていたため、
getAttributeはフォーム内のデータを受け取っているものとばかり思い込んでいました^^;


>自分の質問に対して「ご」をつけるのはやめた方がいいですよ。
すみません、ご指摘ありがとうございます。
「自分が質問した質問に対して“ご”」をつけるのは、日本語(敬語)として可笑しいということでしょうか?(またはくどいとか・・・(^^;)

私の中では癖になってしまっているみたいなので、
もしよろしければご指南お願いいたします。

お礼日時:2009/07/30 19:46

何がどこでどう動いているかがまだよくわかってないのかな?


JSPは所詮サーブレットですよ。
JSPはサーバーでjavaファイルに変換されて、
さらにjavaファイルからclassファイルにコンパイルされます。
で、classファイル(サーブレット)が最終的にHTMLを吐く。と。

…ぜんぜん質問とは関係ないですが…。
今回の「ご質問」の場合、「質問」という行為をするのは質問者様ご自身ですよね?
その自分自身の「質問」という行為に対して、自分で「ご」をつけるのは…。
ということです。
例えば、自分が物を食べるときに「召し上がります。」とは言いいませんよね?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>JSPは所詮サーブレットですよ。
>JSPはサーバーでjavaファイルに変換されて、
>さらにjavaファイルからclassファイルにコンパイルされます。
>で、classファイル(サーブレット)が最終的にHTMLを吐く。と。
どうもありりがとうございます。
この点、存じています。

ああ。そうなるのですね。
自分がする行為に対して「ご」をつけるのは可笑しいと。

私はてっきり
質問というのは相手に向けるものであるため、
そして教わる立場であるから敬意として「ご」をつけるものだと思っていました。^^;

お礼日時:2009/08/02 12:06

Servletには、そもそも3つのスコープが存在します。

(JSPは、4つ。)

Javaの道 > Servlet・JSP > Servlet -4.スコープ
http://www.javaroad.jp/servletjsp/sj_servlet4.htm

で、リクエストスコープ内で「データの共有」をしたい場合(主に、Servlet→JSPなど。)には、getAttributeメソッドを使用します。

そうではなく、ただ単にリクエストパラメータ(クエリストリングやHTMLフォームを使用。)を取得したいだけの場合は、getParameterメソッドを使用します。

参考URL:http://www.stackasterisk.jp/tech/javaClassref/ja …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

getAttributeって
あくまで「データ共有」を目的とした場合にしようするものだったのですね。

いま思ってみれば
「編集されたデータを保管する」などの役割からもそうといえますよね。

URLの方参考にさせていただきます。

お礼日時:2009/08/02 12:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています