getAttribute()とgetParameter()の違い


282

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


1
どのクラス/パッケージ/ APIにありますか?関連するメソッドのJavaDocsを読んでみましたか?
Andrew Thompson


属性は、サーブレットが連携するのに役立つhttpリクエスト専用です
-bitfishxyz

回答:


328
  • getParameter()httpリクエストパラメータを返します。クライアントからサーバーに渡されたもの。例えばhttp://example.com/servlet?parameter=1。返却のみ可能String

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


3
あなた${attrName}がjspページのようなものを使うとき、それらはあなたがrequest.getSession().setAttribute()
ha9u63ar 2015

リクエスト属性はサーバー側に保存されるので、サーバー間ポストリダイレクト取得リクエストのリクエスト属性を設定できますか?リダイレクトリクエストの属性を使用して、JSF内のあるサーバーから別のサーバーに情報を送信したい。現在、POSTリクエストで送信できます。
user2918640 2016年

この場合、「パラメーター」は「クエリ文字列」と同義のようです
BTRUE

getAttribute()はサーバーサイドでの使用だけではありません。たとえばjspページなどでフロントエンドで属性データを取得して表示できます
パーサー

49

一般に、パラメータは文字列値であり、クライアントからサーバーに送信され(たとえば、フォームポスト)、サーブレットリクエストから取得されることが最も一般的です。これに対するイライラする例外は、web.xmlで構成され、サーバーに存在する文字列パラメーターであるServletContext初期パラメーターです。

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

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

以外にも、「一般的に、パラメータは文字列値である」文字列、我々は何を送信することができますか?
2016年

^ request.setAttributeの場合のオブジェクト
Arijit

37

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オブジェクトを抽出し、他の文字列値を提供することです。どちらの場合も、名前(文字列またはJava Bean)を検索して抽出できるように名前が付けられます。


4
これは素晴らしい例でした。これは受け入れられる答えになるはずです。受け入れられた答えは正しいですが、新規参入者のための例はすべてを明らかにしました。ありがとうございました。
CapturedTree

26

属性パラメータではないことを理解することが重要です。

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

さらに、サーブレット固有の属性セッションパラメータはありません。

この投稿は、@ Bozhoの返信につながることを目的として書かれています。


9

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


5

- の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」という名前の入力ボックスの投稿されたフォームから値を取得します。次に、それを印刷するので、画面に「クライアントパラメータ」が表示されます。したがって、request.getParameter()は、クライアントが送信した値を取得します。サーバー側で値を取得します。

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


4

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

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

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

getAttributeを使用すると、Session変数を取得できます。


3

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

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

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

合計4つの属性のスコープがあります。「ページ」(JSPおよびタグファイルのみ)、「リクエスト」(現在のクライアントのリクエストに限定、リクエストの完了後に破棄)、「セッション」(クライアントのセッションに保存、無効化)セッションが終了した後)、「アプリケーション」(アプリケーションのデプロイされた存続期間全体でアクセスするすべてのコンポーネントに存在します)。

要点は、クライアントからデータを取得するときにパラメーターを使用し、アプリケーションのみが内部で使用するサーバーにオブジェクトを格納するときにスコープ属性を使用することです。


3

使用する必要があるもう1つのケース.getParameter()は、jspのパラメーターを使用して転送する場合です。

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

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

request.getParameter("userName")

-6

getAttribute()getParameter()の基本的な違いは、戻り値の型です。

java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)

2
あなたはこれについて厳格ではありません。
Bogdan M.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.