如果地圖僅僅是不可變的應用程序,而不是應用程序服務器
它在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