web-dev-qa-db-ja.com

getAttribute()とgetParameter()の違い

HttpServletRequestクラス内のgetAttribute()メソッドとgetParameter()メソッドの違いは何ですか?

261
priya
  • getParameter()はhttpリクエストパラメータを返します。それらはクライアントからサーバーに渡されました。例えばhttp://example.com/servlet?parameter=1です。 Stringのみを返すことができます

  • getAttribute()はサーバーサイドでの使用のみを目的としています - あなたは同じリクエスト内で使用できる属性でリクエストを満たします。たとえば、サーブレットに属性を設定し、それをJSPから読み取ります。文字列だけでなく、あらゆるオブジェクトに使用できます。

303
Bozho

一般的に、パラメータはクライアントからサーバーへ送信されることで最も一般的に知られている文字列値(例:フォームポスト)で、 サーブレットリクエストから取得されます これに対するイライラする例外は ServletContext初期パラメータ です。これはweb.xmlで設定され、サーバ上に存在する文字列パラメータです。

属性は、指定されたスコープ内に存在するサーバー変数です。

  • アプリケーション全体の存続期間中利用可能なapplication
  • セッションの存続期間中使用可能なsession
  • request、リクエストの有効期間中のみ利用可能
  • 現在のJSPページでのみ利用可能なpage(JSPのみ)
43
krock

request.getParameter()

request.getParameter()を使用してリクエストパラメータ(つまり、htmlフォームを投稿することによって送信されたデータ)を抽出します。 request.getParameter()は常にString値を返し、データはクライアントから来ます。

request.getAttribute()

サーバサイドのリクエストスコープにオブジェクトを追加するにはrequest.getAttribute()を使います。つまりrequest.setAttribute()を使います。あなたはここで好きなどんなタイプのオブジェクト、Strings、カスタムオブジェクト、実際にはあらゆるオブジェクトを追加することができます。属性をリクエストに追加して、そのリクエストを別のリソースに転送すると、クライアントはそれを知りません。したがって、これを処理するすべてのコードは通常JSP /サーブレットにあります。 request.setAttribute()を使用すると、追加情報を追加したり、現在の要求を別のリソースに転送/リダイレクトしたりできます。

たとえば、first.jspについて考えます。

//First Page : first.jsp
<%@ page import="Java.util.*" import="Java.io.*"%>
<% request.setAttribute("PAGE", "first.jsp");%>
<jsp:forward page="/second.jsp"/>

そしてsecond.jsp:

<%@ page import="Java.util.*" import="Java.io.*"%>
From Which Page : <%=request.getAttribute("PAGE")%><br>
Data From Client : <%=request.getParameter("CLIENT")%>

ブラウザからfirst.jsp?CLIENT = youを実行すると、ブラウザの出力は次のようになります。

From Which Page : *first.jsp*
Data From Client : you

getAttribute()getParameter()の基本的な違いは、最初のメソッドは(直列化された)Javaオブジェクトを抽出し、他のメソッドはString値を提供するということです。どちらの場合も、名前(文字列でもJava Beanでも)を調べて抽出できるように名前が付けられています。

31
AVI

属性パラメータではないことを知っておくことは非常に重要です。

属性の戻り型はObjectですが、パラメータの戻り型はStringです。 getAttribute(String name)メソッドを呼び出すときは、属性をキャストする必要があることに注意してください。

また、サーブレット固有の属性はなく、セッションパラメータはありません

この投稿は、@ Bozhoの回答を他の人々に役立つかもしれない追加情報として接続することを目的として書かれています。

26
oneiros

GetAttributeとgetParameterの違いは、getParameterはHTMLフォームによって送信されたか、クエリ文字列に含まれていたパラメータの値を返すという点です。 getAttributeは、リクエストに設定したオブジェクトを返します。これを使用できる唯一の方法は、RequestDispatcherと組み合わせることです。 RequestDispatcherを使用して、リクエストを他のリソース(JSP /サーブレット)に転送します。そのため、リクエストを転送する前に、次のリソースで利用できるようになる属性を設定できます。

9
Abhi

- getParameter()

<html>
<body>
<form name="testForm" method="post" action="testJSP.jsp">
<input type="text" name="testParam" value="ClientParam">
<input type="submit">
</form>
</body>
</html>

    <html>
    <body>
    <%
    String sValue = request.getParameter("testParam");
    %>
    <%= sValue %>
    </body>
    </html>

request.getParameter("testParam")は投稿された "testParam"という名前の入力ボックスの "Client param"から値を取得します。印刷されますので、画面に "Client Param"と表示されるはずです。そのため、request.getParameter()はクライアントが送信した値を取得します。サーバー側で値を取得します。

- getAttribute():request.getAttribute()、これはすべてサーバー側で行われます。あなたはリクエストに属性を追加し、あなたは別のリソースにリクエストを送信します、クライアントはこれについて知りません。したがって、これを処理するすべてのコードは通常servlets.getAttribute内にあり、常にオブジェクトを返します。

5
Reetika

getParameter - クライアントのHTMLページから必要な情報を取得するために使用されます

getAttribute - これは、別のまたは同じJSPページまたはサーブレットページで以前に設定されたパラメータを取得するために使用されます。

基本的に、あるJSP /サーブレットから別のJSP /サーブレットに転送している場合、またはそれらを別のオブジェクトに移動している場合は、それらをObjectに格納し、set-attributeを使用してSession変数に格納しない限り、必要な情報はありません。

GetAttributeを使うと、Session変数を取得できます。

4
PaulStevens

.getParameter()を使用すべきもう1つのケースは、jspのパラメータで転送する場合です。

<jsp:forward page="destination.jsp">
    <jsp:param name="userName" value="hamid"/>
</jsp:forward>

destination.jspでは、userNameに次のようにアクセスできます。

request.getParameter("userName")
3
Hamid Mohayeji

http://www.coderanch.com/t/361868/Servlets/Java/request-getParameter-request-getAttributeから

「パラメータ」とは、クライアントからサーバーに送信される名前と値のペアです。通常は、HTMLフォームから送信されます。パラメータは文字列値のみを持つことができます。場合によっては(たとえば、GETリクエストを使用して)、URLに直接エンコードされていることがわかります(?の後、それぞれname = valueの形式で、各ペアは&で区切られています)。 POSTなどのメソッドを使用している場合は、リクエストの本文に含まれることもあります。

「属性」とはサーバーローカルの保存メカニズムです。明示的に行わない限り、スコープ付き属性に保存されたものはサーバーの外部に送信されることはありません。属性は文字列名を持ちますが、オブジェクト値を格納します。属性はJavaに固有のものであり(Javaオブジェクトを格納する)、パラメータはプラットフォームに依存しません(これらは汎用バイトで構成された書式付き文字列のみです)。

合計で4つの属性範囲があります。 "page"(JSPおよびタグファイルのみ)、 "request"(現在のクライアントの要求に限定され、要求の完了後に破棄されます)、 "session"(クライアントのセッションに格納、無効化)セッションが終了した後)、 "アプリケーション"(あなたのアプリケーションのデプロイされた全寿命の間にアクセスするためにすべてのコンポーネントのために存在します)。

つまり、クライアントからデータを取得するときはパラメータを使用し、アプリケーションが内部的に使用するためにオブジェクトをサーバに格納するときはスコープ属性を使用します。

2
Bhavin Shah