您的位置:首页 > 移动开发

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

2010-11-03 17:28 411 查看
from :  http://magicgod.javaeye.com/blog/146537

关键字: java, wrapper, request, filter
在filter里如何修改提交的参数呢?

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

必须创建一个wrapper:class ParameterRequestWrapper,继承:HttpServletRequestWrapper,里面至少要实现这些方法:

private Map params;

public ParameterRequestWrapper(HttpServletRequest request,Map newParams) {

super(request);

this.params=newParams;

}

public Map getParameterMap() {

return params;

}

public Enumeration getParameterNames() {

Vector l=new Vector(params.keySet());

return l.elements();

}

public String[] getParameterValues(String name) {

Object v = params.get(name);

if(v==null){

return null;

}else if(v instanceof String[]){

return (String[]) v;

}else if(v instanceof String){

return new String[]{(String) v};

}else{

return new String[]{v.toString()};

}

}

public String getParameter(String name) {

Object v = params.get(name);

if(v==null){

return null;

}else if(v instanceof String[]){

String []strArr=(String[]) v;

if(strArr.length>0){

return strArr[0];

}else{

return null;

}

}else if(v instanceof String){

return (String) v;

}else{

return v.toString();

}

}

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

在filter里,这样写:

HttpServletRequest request=(HttpServletRequest) req;

HashMap m=new HashMap(request.getParameterMap());

String fullURL = request.getRequestURI()+"?"+request.getQueryString();

if(matchURL(fullURL) && processParamsters(m)){

ParameterRequestWrapper wrapRequest=new ParameterRequestWrapper(request,m);

chain.doFilter(wrapRequest, resp);

}else{

chain.doFilter(req, resp);

}

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

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

这也是j2ee推荐的办法,除了改参数外还可以作很多事,完全可以定制request。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐