純粋なサーブレット/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
この場合、あなたが得ているのも不思議ではありません。
これがあなたを助けることを願っています。