2

いつも、Google で検索すると、JSP からサーブレットに変数を渡すことについて、Stackoverflow に投稿されている多数の回答が得られました。しかし、私は疑問に思っています、私は答えを得ません:How to pass a variable from JSP to a servlet class? Is it possible?

実際に私は単純な電話帳アプリケーションをやっています。ここでは、編集および削除のために連絡先 ID をサーブレットに送信する必要があります。この値を渡すにはどうすればよいですか?

を使用してサーブレットから JSP に変数を渡すことができることはわかっていますが、request.setAttribute(key, value) それを使用して JSP で変数を設定し、再度使用してそれを取得するとsession.getAttribute(key )、結果は null になります。

神よ私を救い給え。

4

2 に答える 2

9

純粋なサーブレット/JSP の世界でサーバーにデータを渡す/送信する標準的な方法(JSP からサーブレットへのケースのように) は、HTML フォームを使用することです。つまり、他のテクノロジ (ASP.NET、 PHPなど)。また、それが純粋な HTML ページか JSP ページかは問題ではありません。フォームからサーバーにデータを送信するための推奨/最も使用される方法はPOSTです。

リクエスト URL のパスの後に含まれるクエリ文字列でデータを渡すこともできます (これは、フォームでPOSTの代わりにGETメソッドを使用した場合にも発生します)。ただし、これは、ページネーションなどの URL の作成などの単純なケースの場合です (追加のクエリを使用して URL を作成する例については、ここで確認できます: JSPでの URL の作成) URL で
パラメーターを渡す例:
http://example.com/foo?param1=bar&page=100

GETメソッドとPOSTメソッドを使用してデータを送信する場合の違いについては、次を参照してください。

したがって、JSP や HTML などから送信/送信されたデータを処理するようにサーブレットを構成できます。POSTメソッドを使用してデータを送信し、サーブレットのメソッドを使用して送信されたデータをそれぞれ処理することを強くお勧めしdoPost()ます。次に、次のServletRequestメソッドのいずれかを使用して、リクエストでクライアントから渡されたパラメータを取得します。

例を含む素晴らしいチュートリアルを次に示します:クライアント要求の処理: フォーム データ

上記のチュートリアルは、次のコースからのものです
: Java での Web アプリの構築: 初級および中級のサーブレットと JSP のチュートリアル


Java EE を使用してデータを交換するもう 1 つの方法は、データを属性として異なるスコープに格納することです。(以下は、SOに関する私の回答の1つからの抜粋です)

Java EE 5 には4 つのスコープがあります(「Java EE 5 チュートリアル: スコープ オブジェクトの使用」を参照)。Java EE 6 および Java EE 7 には5 つのスコープがあります(「Java EE 6 チュートリアル: スコープの使用」および「Java EE 7 チュートリアル: スコープの使用」を参照)。最も使用されるのは次のとおりです。

  • リクエストの範囲
  • セッション スコープ
  • アプリケーション スコープ(Web コンテキスト)

適切な属性を設定することにより、上記のすべてのスコープに一部のデータを格納できます。

以下は、リクエスト スコープに関するServletRequest.setAttribute(String, Object)メソッドに関連する Java EE API ドキュメントからの引用です。

void setAttribute(java.lang.String name,
                  java.lang.Object o)

このリクエストに属性を格納します。属性はリクエスト間でリセットされます。このメソッドは、ほとんどの場合、RequestDispatcher と組み合わせて使用​​されます。
...

したがって、新しいリクエストごとに、リクエストで設定した以前の属性は失われます。リクエストに属性を設定したら、リクエストを目的のページに転送する必要があります。リダイレクトすると、これはまったく新しいリクエストになるため、以前に設定した属性は失われます。(それでもリダイレクトを使用したい場合は、これを読んでください: Servlet Redirection to same page with error message )

HttpSession (セッション スコープ内) で設定されたこれらの属性は、セッションが存続する限り存続し、もちろん、セッションが属するユーザーのみが使用できます。

コンテキスト属性に関しては、Web アプリケーション全体 ( application スコープ) およびすべてのユーザーが利用できるように意図されており、さらに Web アプリケーションが存続している限り存続します。

また、この記事も役立つかもしれません: How Java EE 6 Scopes Affect User Interactions


また、次の問題にも注意してください。あなたは書いた(引用):

request.setAttribute(key , value) を使用して、サーブレットから jsp に変数を渡すことができますが、それを使用して jsp で変数を設定し、session.getAttribute(key ) を使用して再度取得すると、結果は null になります。

ユーザー @neel と @Sanchit が気づいたように、requestオブジェクトに属性を設定していますが、session. nullこの場合、あなたが得ているのも不思議ではありません。


これがあなたを助けることを願っています。

于 2013-04-03T20:27:24.120 に答える