Web UI に 2 つの送信ボタンがあります。
最初の送信ボタンが押されると、制御がサーブレットに渡され、バックエンド操作が行われ、EmployeeInfo クラス (setter-getter クラス) がそのフィールド (メンバー変数) セットの一部を取得します。
コントロールが UI に戻り、2 番目の送信ボタンを押します。
同じサーブレットで、フィールドが同じ値を持つ EmployeeInfo の同じオブジェクトを取得できますか? セッションオブジェクトを使用する以外。
状況には 2 つのアプローチがあります。ステートフル サーバーまたはステートレス サーバー (REST)を使用します。
ステートフル サーバー
サーバー上にクライアント状態を保持しても問題ない場合は、 a を使用しHttpSession
て中間結果を保存する必要があります (詳細については、他の回答を参照してください)。ユーザーがブラウザ タブを複製すると、両方のタブがサーバー上で同じセッションを共有するため、問題が発生する可能性があることに注意してください。
しかし、あなたが書いたように、セッションオブジェクトを使用したくない場合は、次のことを考慮してください。
ステートレス サーバー (REST)
サーバーで状態を保持することを避けたい場合は、クライアントでそれを行い、リクエストごとにすべての必要な状態をサーバーに転送します。
このアプローチは、REST (Representational State Transfer) とも呼ばれます。そのための Java 標準があります: JAX-RS。
ただし、その API を使用する必要はありません。HTML クライアントを使用している場合は、すべてのデータを隠しフィールドに保存するだけで、送信時にサーバーに転送されます。したがって、隠しフィールドを 2 番目の HTML フォームに生成するには、サーバー側のスクリプト (JSP) が必要です。
最初のリクエスト後にオブジェクトをHttpSessionに保存する
EmployeeInfo info = ..
// ...
request.getSession().setAttribute("EMPLOYEE_INFO", info); // store object to http session
HttpSession
2 番目のリクエストでオブジェクトを取得する
EmployeeInfo info = (EmployeeInfo)request.getSession().getAttribute("EMPLOYEE_INFO");
1 つのオプションは、セッション オブジェクトに保存することです。その場合、使用が完了したら、セッションから削除する必要があります。セッションを使用したくない場合は、オブジェクトのフィールドに対応する UI で隠しフィールドを設定します。 2 回目の送信では、リクエスト パラメータを読み取って、これらの値をオブジェクトに戻します。