Map がアプリケーション サーバーではなく、アプリケーションに対してのみ不変である場合
はい、APIでは不変です。また、リクエスト パラメータ マップを変更する意味は何ですか? サーブレットコンテナの実装はもちろん、「舞台裏で」その変更可能なマップを保持できます。ただし、実装固有の詳細について心配する必要はありません。
アプリケーション サーバーが別のリクエストでインスタンスを再利用することが許可されている場合 (たとえば、パラメータとその値が前のリクエストと同じである場合)
いいえ、サーバーはそれを行いません。新しいものを作成するだけです。パラメータは特定のリクエストにバインドされます。
セッション中にすべてのリクエストのパラメーターを収集する場合は、自分で行う必要があります。これに最適な場所はFilter
.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest hsr = (HttpServletRequest) request;
List<Map<String, String[]>> allParameters = (List<Map<String, String[]>>) hsr.getSession().getAttribute("allParameters");
if (allParameters == null) {
allParameters = new ArrayList<Map<String,String[]>>();
hsr.getSession().setAttribute("allParameters", allParameters);
}
allParameters.add(hsr.getParameterMap());
chain.doFilter(request, response);
}