如果地图仅仅是不可变的应用程序,而不是应用程序服务器
它在API中是不可变的,是的。这也是有道理的,改变请求参数图有什么意义?反过来,servletcontainer实现当然可以拥有“幕后”的可变映射。但是你不应该担心实现的具体细节。
,如果它允许应用程序服务器可能会重新使用实例的另一个请求(例如,如果参数和它们的值是一样的,在以前的请求)
没有,服务器不这样做。它只是创建一个新的。参数绑定到特定的请求。
如果你想在会话期间收集每个请求的参数,那么你需要自己做这个。最好的地方是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);
}
这是一个设计的气味。请详细说明功能要求:)有可能比这更好的解决方案。 – BalusC 2010-07-28 16:00:53
@BalusC:我想保存每个请求的请求地图,和在发生错误的情况下,我想打印出用于诊断目的的每个参数映射(以及其他内容)。 – MRalwasser 2010-07-28 22:25:33