• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

そもそも >感覚的には >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じゃ取得できません。 その他 自分の質問に対して「ご」をつけるのはやめた方がいいですよ。

Guno-this
質問者

お礼

ありがとうございます。 ご回答いただきました内容分り易かったです。 >例えば、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はフォーム内のデータを受け取っているものとばかり思い込んでいました^^; >自分の質問に対して「ご」をつけるのはやめた方がいいですよ。 すみません、ご指摘ありがとうございます。 「自分が質問した質問に対して“ご”」をつけるのは、日本語(敬語)として可笑しいということでしょうか?(またはくどいとか・・・(^^;) 私の中では癖になってしまっているみたいなので、 もしよろしければご指南お願いいたします。

その他の回答 (2)

回答No.3

何がどこでどう動いているかがまだよくわかってないのかな? JSPは所詮サーブレットですよ。 JSPはサーバーでjavaファイルに変換されて、 さらにjavaファイルからclassファイルにコンパイルされます。 で、classファイル(サーブレット)が最終的にHTMLを吐く。と。 …ぜんぜん質問とは関係ないですが…。 今回の「ご質問」の場合、「質問」という行為をするのは質問者様ご自身ですよね? その自分自身の「質問」という行為に対して、自分で「ご」をつけるのは…。 ということです。 例えば、自分が物を食べるときに「召し上がります。」とは言いいませんよね?

Guno-this
質問者

お礼

ご回答ありがとうございます。 >JSPは所詮サーブレットですよ。 >JSPはサーバーでjavaファイルに変換されて、 >さらにjavaファイルからclassファイルにコンパイルされます。 >で、classファイル(サーブレット)が最終的にHTMLを吐く。と。 どうもありりがとうございます。 この点、存じています。 ああ。そうなるのですね。 自分がする行為に対して「ご」をつけるのは可笑しいと。 私はてっきり 質問というのは相手に向けるものであるため、 そして教わる立場であるから敬意として「ご」をつけるものだと思っていました。^^;

回答No.2

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/java_ref_01_08.jsp
Guno-this
質問者

お礼

ご回答ありがとうございます。 getAttributeって あくまで「データ共有」を目的とした場合にしようするものだったのですね。 いま思ってみれば 「編集されたデータを保管する」などの役割からもそうといえますよね。 URLの方参考にさせていただきます。

関連するQ&A

専門家に質問してみよう