2012-01-03 132 views
0

有什麼方法可以在動作類中修改請求頭或設置頭?我想修改它,或者你可以說我想把標誌放在請求標題中,就像我們把值放在'屬性'和參數中一樣。在java中設置請求標頭

回答

3

您可以使用HttpServletRequestWrapper來做到這一點。但這是非常骯髒的解決方案。真的沒有其他方法可以解決您的問題嗎?

1

你不能。從servlet返回的請求參數是不可修改的Map。您不能添加/刪除請求(通過servlet)返回的內容。

爲了設置一個標誌,我的建議是將它存儲在一個會話中,並在另一個動作中,檢索標誌&將其從會話中刪除。

+0

這意味着我只能從請求中獲取數據。單向數據移動 – muneebShabbir 2012-01-03 07:31:32

+0

是的,因爲請求是從客戶端發送到服務器的數據。把它看作是客戶給你發送真正的信息。如果我們有機會操縱標題請求,那麼任何人都可以通過代碼來欺騙它。等等,這是可能的,但對於Servlet,容器不應該允許這樣做。 – 2012-01-03 07:44:54

+0

你的意思是容器?我在struts-1中工作,並嘗試修改操作類 – muneebShabbir 2012-01-03 07:48:20

0

您需要提供更多詳細信息。聽起來你想在服務器收到請求後操縱請求頭。我不確定我明白你爲什麼想這麼做。修改響應頭是有道理的。但不是要求。

+0

其實我想模擬流量。標題由第三方模塊設置。但在本地我想測試的反射,這就是爲什麼我試圖設置請求的標題 – muneebShabbir 2012-01-03 07:34:03

1

我認爲你需要將原始請求包裝到一個包含你想要的更改的請求類中。

將處理前的請求參數解析爲對您的應用程序邏輯更有意義的對象,然後將這些對象的狀態設置在您現在想要修改原始位置的位置頭。

+0

聽起來不錯...我必須試一試 – muneebShabbir 2012-01-03 07:43:39

+0

你能給我例子我怎麼能包裹我的請求? – muneebShabbir 2012-01-03 07:46:17

0

我認爲他們只有乾淨的方式,你可以做到這一點是通過HttpServletRequestWrapper

只是覆蓋getHeader,getHeaders,getHeaderNames,你是好去。

1

這個問題的答案取決於你要解決什麼問題。

您的一條評論意味着您試圖測試;如果是這種情況,您有兩個基本選項:

  1. 使用模擬請求(單元式測試)。
  2. 更改客戶端的頭文件(集成類型測試)。

要從真實客戶端進行測試,請在客戶端設置標頭。

對於嘲笑客戶端的交互,你應該使用某種形式的模擬。例如,StrutsTestCase提供MockStrutsTestCase(容器外)和CactusStrutsTestCase(容器內)類,允許輕鬆處理請求屬性和特性。