2

わかりました、私は混乱しました。元のマップへのポインターを返すと思いますか?

    private HttpServletRequest originalRequest;
    Map params = originalRequest.getParameterMap();
      params.remove("parameter-to-remove");
      params.put("parameter-to-add", "<a value>");

これらのアクションの後、originalRequest のパラメーターは変更されますか? それとも、値をparamsにコピーするだけで、それらをどうするかは問題ではなく、originalRequestで何も変更されませんか?

4

2 に答える 2

4

返されたマップは不変のマップです。これが、変更が反映されていない理由である可能性があります。

getParameterMap Javadocに従って

パラメータ名をキーとして、パラメータ値をマップ値として含む不変の java.util.Map。パラメータ マップのキーは String 型です。パラメータ マップの値は、String 配列型です。

リクエストに何らかの値を設定したい場合は、setAttributeを使用する必要があります。

于 2012-11-20T03:58:15.763 に答える
1

いいえ、リクエスト オブジェクトからリクエスト パラメータを削除または追加することはできません。リクエストオブジェクトが範囲外になるまで(リクエスト処理サイクルの終了後)、それらは(サーバーに到着したときに)残っている必要があります。

論理的には、そのようなことを許可された場合、リクエスト オブジェクトは元のリクエストを表すものではなくなります。リクエスト処理サイクル全体で、改ざんされたリクエストではなく、クライアントから送信されたリクエストを処理したいと考えています。

代わりに使用する方法はvoid setAttribute(java.lang.String name, java.lang.Object o).

于 2012-11-20T04:15:32.163 に答える