首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

怎么使用wrapper在filter修改request参数(转)

2012-10-26 
如何使用wrapper在filter修改request参数(转)在filter里如何修改提交的参数呢??整个request接口是没有提供

如何使用wrapper在filter修改request参数(转)

在filter里如何修改提交的参数呢??

整个request接口是没有提供这样的API的,即使取出ParameterMap,也是只读的。?

必须创建一个wrapper:class ParameterRequestWrapper,继承:HttpServletRequestWrapper,里面至少要实现这些方法:?
Java代码??怎么使用wrapper在filter修改request参数(转)

  1. private?Map?params;??
  2. public?ParameterRequestWrapper(HttpServletRequest?request,Map?newParams)?{??
  3. ??super(request);??
  4. ??this.params=newParams;??
  5. }??
  6. public?Map?getParameterMap()?{??
  7. ??return?params;??
  8. }??
  9. public?Enumeration?getParameterNames()?{??
  10. ??Vector?l=new?Vector(params.keySet());??
  11. ??return?l.elements();??
  12. }??
  13. public?String[]?getParameterValues(String?name)?{??
  14. ??Object?v?=?params.get(name);??
  15. ??if(v==null){??
  16. ????return?null;??
  17. ??}else?if(v?instanceof?String[]){??
  18. ????return?(String[])?v;??
  19. ??}else?if(v?instanceof?String){??
  20. ????return?new?String[]{(String)?v};??
  21. ??}else{??
  22. ????return?new?String[]{v.toString()};??
  23. ??}??
  24. }??
  25. public?String?getParameter(String?name)?{??
  26. ??Object?v?=?params.get(name);??
  27. ??if(v==null){??
  28. ????return?null;??
  29. ??}else?if(v?instanceof?String[]){????????????
  30. ????String?[]strArr=(String[])?v;??
  31. ????if(strArr.length>0){??
  32. ??????return?strArr[0];??
  33. ????}else{??
  34. ??????return?null;??
  35. ????}??
  36. ??}else?if(v?instanceof?String){??
  37. ????return?(String)?v;??
  38. ??}else{??
  39. ????return?v.toString();??
  40. ??}??
  41. }??????


map, names, values, 一个都不能少啊。?


在filter里,这样写:?

Java代码??怎么使用wrapper在filter修改request参数(转)
  1. HttpServletRequest?request=(HttpServletRequest)?req;??
  2. HashMap?m=new?HashMap(request.getParameterMap());??
  3. String?fullURL?=?request.getRequestURI()+"?"+request.getQueryString();??
  4. if(matchURL(fullURL)?&&?processParamsters(m)){??
  5. ??ParameterRequestWrapper?wrapRequest=new?ParameterRequestWrapper(request,m);?????????
  6. ??chain.doFilter(wrapRequest,?resp);??
  7. }else{??
  8. ??chain.doFilter(req,?resp);??
  9. }??


matchURL是匹配url来决定是否生效,processParamsters是自定义函数,想怎么处理就怎么处理。?

这样的话,经过filter之后,实际上request变成了ParameterRequestWrapper,以后的filter将会操作这个类。不过似乎用在ActionForward上有点问题,还没解决。?

这也是j2ee推荐的办法,除了改参数外还可以作很多事,完全可以定制request。

热点排行