質問: getparameter と getattributeの違いについて 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.php?topic=403&forum=12
回答: そもそも >感覚的には >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じゃ取得できません。 その他 自分の質問に対して「ご」をつけるのはやめた方がいいですよ。