我有一種情況,我需要重定向我的HTTP請求對象到其他控制器/類進行進一步處理。問題是,在某些控制器中,我希望更好地控制轉發給下一個類的參數:修改,編輯,刪除它們。所以,我想知道是否有一個很好的練習/模式來實現HTTP請求參數的基本控制。在控制器/類中刪除HttpServletRequest參數的最佳方法?
8
A
回答
17
好的做法是使用servlet過濾器將請求對象包裝在另一個對象中。由於HttpServletRequest是一個接口,您可以編寫自己的實現。您的實現可以保存您收到的請求,並將任何和所有自己的方法委託給原始請求對象,但也可以根據需要修改返回值。因此,您的getParameter()等方法可以調用原始請求對象上的相同方法,並在返回之前按照您認爲合適的方式修改結果。
class MyHttpServletRequestWrapper implements HttpServletRequest {
private HttpServletRequest originalRequest;
public MyHttpServletRequestWrapper(HttpServletRequest originalRequest) {
this.originalRequest = originalRequest;
public String getAuthType() {return originalRequest.getAuthType();}
public String getQueryString() {return originalRequest.getQueryString();}
// etc.
public Map getParameterMap() {
Map params = originalRequest.getParameterMap();
params.remove("parameter-to-remove");
params.put("parameter-to-add", "<a value>");
//etc.
}
}
您的Servlet過濾器:
class MyFilter implements Filter {
public void init(FilterConfig config) {
// perhaps you might want to initialize something here
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest originalRequest = (HttpServletRequest) request;
HttpServletRequest newRequest = new MyHttpServletRequest(originalRequest);
chain.doFilter(newRequest, response);
}
}
您也可以繼承javax.servlet.request.HttpServletRequestWrapper,這將節省你一堆的工作。
查看此post瞭解更多信息。
2
如果你一個簡單的一行後,這正則表達式技術爲我工作:
myURL = myURL.replaceAll("[&?]clear=([^&]$|[^&]*)", "");
如果你需要它在Javascript中,它非常類似於的確 - 這是很好的!
var myUrl = (""+window.location).replace(/&?clear=([^&]$|[^&]*)/i, "");
清楚是要除去的參數的名稱。
相關問題
- 1. 從導航控制器堆棧中刪除所有ViewController的最佳方法
- 2. ASP.NET MVC處理控制器中動態參數數量的最佳方法
- 3. 在Scala中實例化類型參數類的最佳方法
- 4. 從wx面板中刪除控件的最佳方法
- 5. 控制器中的參數化方法
- 6. CakePHP - 在控制器中調用API的最佳方法?
- 7. 在指令中使用控制器的最佳方法
- 8. 在angularJs中定義控制器的最佳方法
- 9. 在控制器中進行權限檢查的最佳方法。
- 10. 在codeigniter中命名控制器和模型的最佳方法
- 11. 在RSpec控制器規格中測試RJS的最佳方法?
- 12. 在監聽器的句柄方法中調用控制器類的方法是否有最佳實踐方法?
- 13. 在用戶控制中刪除方法
- 14. 刪除設計的最佳方法?
- 15. 限制在NinjaFramework的控制器方法中的參數個數?
- 16. 從JavaScript中的數組中刪除元素的最佳方法?
- 17. Rails在控制器動作中的條件參數的最佳做法
- 18. 在控制器中修改/格式化數據庫數據的最佳方法?
- 19. 注入實例化無法控制的類的最佳方法?
- 20. 控制器中非克隆方法排序的最佳實踐
- 21. Java最佳實踐:控制器中呼叫的最佳數量
- 22. 爲某些控制器強制使用SSL的最佳方法?
- 23. 從多個表中刪除數據的最佳方法?
- 24. 從數據表中刪除重複條目的最佳方法
- 25. 在Java中刪除集合中重複的最佳方法?
- 26. 刪除類型轉換指針的最佳方法
- 27. 如何打通.getJSON方法在控制器方法的參數
- 28. 處理在Symfony2中刪除記錄的最佳方法
- 29. 在Android Studio中刪除Activity及其引用的最佳方法
- 30. 在JavaScript中刪除對象的最佳方法是什麼?
即使您鏈接到的帖子包含更多信息,您應該指定這應該使用過濾器完成(如果這是您的意思)。 – Vetle 2010-10-15 08:14:39
非常感謝。我將使用HttpRequest對象的過濾器和包裝類。 – 2010-10-15 08:44:46