0

HttpServletRequest と HttpServletResponse を Java クラスに渡す JSP ページがあります。この Java クラスは、"action" という名前のパラメーターに基づいてアクション クラスに要求と応答をディスパッチします。アクション クラスは何らかのアクションを実行し、同じ手順が繰り返される別の JSP に転送されることがあります。あなたがサーブレットを使うべきだと思うなら、それはあなたの権利ですが、それは長い話であり、基本的に私も権限を持っていません。

アクション クラスの 1 つで、データを検証し、有効であれば、RequestDispatcher を使用してリクエストを別の JSP に転送します。また、実行するアクションを他の JSP に伝えることができるように「アクション」属性を設定しようとしましたが、属性が要求と共に転送されないことがわかりました。実際、アクション パラメータが変更されていないために同じアクションを実行していたため、コードが無限ループを開始し、その結果、アクションと JSP の間で要求がループしていました。

新しいページの URL にパラメーターを渡すことで、アクション パラメーターをオーバーライドできることがわかりました。そのようです:

RequestDispatcher dispatcher = request.getRequestDispatcher("someUrl.jsp?action=SOME_OTHER_ACTION");
dispatcher.forward(request, response");

この解決策は私には怪しいにおいがします。これが良いアイデアかどうかについて、誰かが洞察を提供できますか?

4

3 に答える 3

2

ご存知のとおり、リクエスト属性は、フィルタやその他のリクエストハンドラがオブジェクトをリクエストオブジェクトに追加するための便利な場所です。これらは、HTTPリクエスト自体からのパラメータとはまったく異なります。属性はHTTPクライアントに渡されず、応答が送信されると失われます。

あなたのアプローチについては何も怪しいことはありません。別の(おそらくもっと悪い)アプローチは、セッションを使用して状態を維持することです。

于 2012-07-19T17:42:27.270 に答える
2

はい、それが転送中にリクエストパラメータを送信する唯一の方法です。

于 2012-07-19T17:37:20.103 に答える
1

これは、パラメーターを渡すための有効な方法の1つだと思います。

他の方法としては、リクエストオブジェクトにアクセスでき、リクエスト属性として設定できます。forwardはサーバー上にあり、もう一方の端で同じリクエスト属性にアクセスできるはずです。

于 2012-07-19T17:29:56.097 に答える