-1

Web UI に 2 つの送信ボタンがあります。

最初の送信ボタンが押されると、制御がサーブレットに渡され、バックエンド操作が行われ、EmployeeInfo クラス (setter-getter クラス) がそのフィールド (メンバー変数) セットの一部を取得します。

コントロールが UI に戻り、2 番目の送信ボタンを押します。

同じサーブレットで、フィールドが同じ値を持つ EmployeeInfo の同じオブジェクトを取得できますか? セッションオブジェクトを使用する以外。

4

5 に答える 5

0

状況には 2 つのアプローチがあります。ステートフル サーバーまたはステートレス サーバー (REST)を使用します。

ステートフル サーバー

サーバー上にクライアント状態を保持しても問題ない場合は、 a を使用しHttpSessionて中間結果を保存する必要があります (詳細については、他の回答を参照してください)。ユーザーがブラウザ タブを複製すると、両方のタブがサーバー上で同じセッションを共有するため、問題が発生する可能性があることに注意してください。

しかし、あなたが書いたように、セッションオブジェクトを使用したくない場合は、次のことを考慮してください。

ステートレス サーバー (REST)

サーバーで状態を保持することを避けたい場合は、クライアントでそれを行い、リクエストごとにすべての必要な状態をサーバーに転送します。

このアプローチは、REST (Representational State Transfer) とも呼ばれます。そのための Java 標準があります: JAX-RS

ただし、その API を使用する必要はありません。HTML クライアントを使用している場合は、すべてのデータを隠しフィールドに保存するだけで、送信時にサーバーに転送されます。したがって、隠しフィールドを 2 番目の HTML フォームに生成するには、サーバー側のスクリプト (JSP) が必要です。

于 2013-11-14T07:37:38.280 に答える
0

最初のリクエスト後にオブジェクトをHttpSessionに保存する

EmployeeInfo info = ..
// ...
request.getSession().setAttribute("EMPLOYEE_INFO", info); // store object to http session

HttpSession2 番目のリクエストでオブジェクトを取得する

EmployeeInfo info = (EmployeeInfo)request.getSession().getAttribute("EMPLOYEE_INFO"); 
于 2013-11-14T07:21:00.590 に答える
0

1 つのオプションは、セッション オブジェクトに保存することです。その場合、使用が完了したら、セッションから削除する必要があります。セッションを使用したくない場合は、オブジェクトのフィールドに対応する UI で隠しフィールドを設定します。 2 回目の送信では、リクエスト パラメータを読み取って、これらの値をオブジェクトに戻します。

于 2013-11-14T07:25:39.790 に答える