HttpServletRequest
クラス内のgetAttribute()
メソッドとgetParameter()
メソッドの違いは何ですか?
getParameter()
はhttpリクエストパラメータを返します。それらはクライアントからサーバーに渡されました。例えばhttp://example.com/servlet?parameter=1
です。 String
のみを返すことができます
getAttribute()
はサーバーサイドでの使用のみを目的としています - あなたは同じリクエスト内で使用できる属性でリクエストを満たします。たとえば、サーブレットに属性を設定し、それをJSPから読み取ります。文字列だけでなく、あらゆるオブジェクトに使用できます。
一般的に、パラメータはクライアントからサーバーへ送信されることで最も一般的に知られている文字列値(例:フォームポスト)で、 サーブレットリクエストから取得されます これに対するイライラする例外は ServletContext初期パラメータ です。これはweb.xmlで設定され、サーバ上に存在する文字列パラメータです。
属性は、指定されたスコープ内に存在するサーバー変数です。
application
session
request
、リクエストの有効期間中のみ利用可能page
(JSPのみ)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でも)を調べて抽出できるように名前が付けられています。
属性はパラメータではないことを知っておくことは非常に重要です。
属性の戻り型はObjectですが、パラメータの戻り型はStringです。 getAttribute(String name)
メソッドを呼び出すときは、属性をキャストする必要があることに注意してください。
また、サーブレット固有の属性はなく、セッションパラメータはありません。
この投稿は、@ Bozhoの回答を他の人々に役立つかもしれない追加情報として接続することを目的として書かれています。
GetAttributeとgetParameterの違いは、getParameterはHTMLフォームによって送信されたか、クエリ文字列に含まれていたパラメータの値を返すという点です。 getAttributeは、リクエストに設定したオブジェクトを返します。これを使用できる唯一の方法は、RequestDispatcherと組み合わせることです。 RequestDispatcherを使用して、リクエストを他のリソース(JSP /サーブレット)に転送します。そのため、リクエストを転送する前に、次のリソースで利用できるようになる属性を設定できます。
- 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内にあり、常にオブジェクトを返します。
getParameter
- クライアントのHTMLページから必要な情報を取得するために使用されます
getAttribute
- これは、別のまたは同じJSPページまたはサーブレットページで以前に設定されたパラメータを取得するために使用されます。
基本的に、あるJSP /サーブレットから別のJSP /サーブレットに転送している場合、またはそれらを別のオブジェクトに移動している場合は、それらをObjectに格納し、set-attributeを使用してSession変数に格納しない限り、必要な情報はありません。
GetAttributeを使うと、Session変数を取得できます。
.getParameter()
を使用すべきもう1つのケースは、jspのパラメータで転送する場合です。
<jsp:forward page="destination.jsp">
<jsp:param name="userName" value="hamid"/>
</jsp:forward>
destination.jsp
では、userName
に次のようにアクセスできます。
request.getParameter("userName")
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"(クライアントのセッションに格納、無効化)セッションが終了した後)、 "アプリケーション"(あなたのアプリケーションのデプロイされた全寿命の間にアクセスするためにすべてのコンポーネントのために存在します)。
つまり、クライアントからデータを取得するときはパラメータを使用し、アプリケーションが内部的に使用するためにオブジェクトをサーバに格納するときはスコープ属性を使用します。