2012-11-20 92 views
2

好吧,我感到困惑。我相信它會返回指向原始地圖的指針?這是否返回指向值的指針還是複製值?

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

現在在這些操作後,原始請求中的參數是否會改變?或者它只是將值複製到參數中,並且它與我們所做的操作無關,而且它們將在originalRequest中進行更改?

+0

這是一個設計問題。你的功能要求是什麼?你想修改一個鎖定的參數映射嗎? – Lion

+0

@Lion我有點想,這是ServletRequests的過濾器應該如何工作? FILTER OUT我們在其他地方不需要的參數?我誤解了嗎? –

回答

1

不,您不允許刪除或向請求對象添加任何請求參數。它們必須保持(當它們到達服務器時),直到請求對象超出範圍(在請求處理週期結束之後)。從邏輯上講,如果你被允許做類似的事情,那麼請求對象不會再代表原始請求。在整個請求處理週期中,我們要處理客戶端發送的請求,而不是被篡改的請求。

您應該改用的方法是void setAttribute(java.lang.String name, java.lang.Object o)

+0

我是那種想法過濾器是從原始請求中濾除參數?我認爲這是使用它們的目的,如果不是,那麼過濾器的用途是什麼? –

+0

你可以在這裏閱讀關於過濾器:http://stackoverflow.com/tags/servlet-filters/info。它們提供了不同的用途,例如修改請求標頭,安全檢查,語言環境等。儘管如此,它們也是實現「Filter」接口的簡單Java類。 –

4

返回的地圖是不可變的地圖,這可能是您沒有看到所反映的變化的原因。

作爲每getParameterMap javadoc

含有參數名作爲密鑰和參數值作爲映射值的不可變java.util.Map。參數圖中的鍵是String類型。參數映射中的值是String數組類型。

如果您想設置一些值來申請,您應該使用setAttribute