HttpServletRequestWrapper的应用(对所有请求进行处理 例如编码 去空格)

public class ParameterRequestWrapper extends HttpServletRequestWrapper {

    /**
     * 请求参数
     */
    private Map<String, String[]> params = new HashMap<String, String[]>();

    /**
     * 
     * 构造函数:
     *
     * @param request HttpServletRequest
     */
    public ParameterRequestWrapper(HttpServletRequest request) {

        // 将request交给父类,以便于调用对应方法的时候,将其输出,其实父亲类的实现方式和第一种new的方式类似
        super(request);
        // 将参数表,赋予给当前的Map以便于持有request中的参数
        this.params.putAll(request.getParameterMap());
    }

    /**
     * 
     * 构造函数:重载一个构造方法
     * 
     * @param request HttpServletRequest
     * @param extendParams Map<String, Object>
     */
    public ParameterRequestWrapper(HttpServletRequest request, Map<String, Object> extendParams) {

        this(request);
        // 这里将扩展参数写入参数表
        addAllParameters(extendParams);
    }

    /**
     * 
     * 功能描述:重写getParameter,代表参数从当前类中的map获取
     *
     * @author :
     * 创建日期 :2014年1月7日 下午4:54:53
     *
     * @param name 参数名称
     * @return
     *
     * 修改历史 :(修改人,修改时间,修改原因/内容)
     */
    @Override
    public String getParameter(String name) {

        String[] values = params.get(name);
        if (values == null || values.length == 0) {
            return null;
        }
        return values[0];
    }

    /**
     * 
     * 功能描述:重写getParameter,代表参数从当前类中的map获取
     *
     * @author :
     * 创建日期 :2014年1月7日 下午4:55:14
     *
     * @param name 参数名称
     * @return
     *
     * 修改历史 :(修改人,修改时间,修改原因/内容)
     */
    @Override
    public String[] getParameterValues(String name) {

        return params.get(name);
    }

    /**
     * 
     * 功能描述:增加多个参数
     *
     * @author :
     * 创建日期 :2014年1月7日 下午4:54:20
     *
     * @param otherParams Map<String, Object>
     *
     * 修改历史 :(修改人,修改时间,修改原因/内容)
     */
    public void addAllParameters(Map<String, Object> otherParams) {

        for(Map.Entry<String, Object> entry : otherParams.entrySet()) {
            addParameter(entry.getKey(), entry.getValue());
        }
    }

    /**
     * 
     * 功能描述:增加参数
     * 
     * @author :创建日期 :2014年1月7日 下午4:53:46
     * 
     * @param name 参数名称
     * @param value 参数值
     * 
     *            修改历史 :(修改人,修改时间,修改原因/内容)
     */
    public void addParameter(String name, Object value) {

        if (value != null) {
            if (value instanceof String[]) {
                params.put(name, (String[]) value);
            } else if (value instanceof String) {
                params.put(name, new String[] { (String) value });
            } else {
                params.put(name, new String[] { String.valueOf(value) });
            }
        }
    }
    
    /**
     * 
     * 功能描述:重写getParameterMap,代表参数从当前类中的map获取
     * 
     * @author :创建日期 :2014年1月7日 下午4:53:46
     * 
     * @return Map<String, String[]>
     * 
     *            修改历史 :(修改人,修改时间,修改原因/内容)
     */
    @Override
    public Map<String, String[]> getParameterMap(){
        return params;
    }

}
public class ParameterRequestFilter implements Filter {

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper((HttpServletRequest)req);
        // 获取请求参数
        Map<String, String[]> paramsMap = requestWrapper.getParameterMap();
        if(paramsMap != null && paramsMap.size() > 0){
            // 遍历请求参数Map
            for(Entry<String, String[]> entry:paramsMap.entrySet()){
                String[] values = entry.getValue();
                if(values != null && values.length > 0){
                    String[] trimValues = new String[values.length];
                    for(int index = 0; index < values.length; index++){
                        trimValues[index] = StringUtil.trim(values[index]);
                    }
                    entry.setValue(trimValues);
                }
                
            }
            
        }
        chain.doFilter(requestWrapper, res);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {

    }

}


你可能感兴趣的:(HttpServletRequestWrapper的应用(对所有请求进行处理 例如编码 去空格))