我有一种情况,我需要重定向我的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. 从wx面板中删除控件的最佳方法
- 2. 控制器中的参数化方法
- 3. 在用户控制中删除方法
- 4. 在指令中使用控制器的最佳方法
- 5. 在angularJs中定义控制器的最佳方法
- 6. 在RSpec控制器规格中测试RJS的最佳方法?
- 7. 在监听器的句柄方法中调用控制器类的方法是否有最佳实践方法?
- 8. 限制在NinjaFramework的控制器方法中的参数个数?
- 9. 从JavaScript中的数组中删除元素的最佳方法?
- 10. Rails在控制器动作中的条件参数的最佳做法
- 11. 在控制器中修改/格式化数据库数据的最佳方法?
- 12. 注入实例化无法控制的类的最佳方法?
- 13. 控制器中非克隆方法排序的最佳实践
- 14. 从数据表中删除重复条目的最佳方法
- 15. 删除数组中重复字符串的最佳方法
- 16. 在Java中删除集合中重复的最佳方法?
- 17. Java最佳实践:控制器中呼叫的最佳数量
- 18. 删除类型转换指针的最佳方法
- 19. 在Android Studio中删除Activity及其引用的最佳方法
- 20. CodeIgniter控制器方法参数问题
- 21. 什么是加载/选择“控制器”类的最佳方式
- 22. 在angularjs中编写控制器方法设计的最佳做法是什么?
- 23. 参数化聚合的最佳方法
- 24. 处理SQL参数的最佳方法?
- 25. 在Yii中处理URL路由/控制器的最佳方式
- 26. 在PHP中实现控制器的最佳方式是什么?
- 27. RESTful控制器的最佳实践CREATE和UPDATE方法
- 28. 使用$ scope分解控制器代码的最佳方法
- 29. 处理重命名控制器的最佳方法
- 30. 结合现有视图/控制器的最佳方法?
即使您链接到的帖子包含更多信息,您应该指定这应该使用过滤器完成(如果这是您的意思)。 – Vetle 2010-10-15 08:14:39
非常感谢。我将使用HttpRequest对象的过滤器和包装类。 – 2010-10-15 08:44:46