我在Filter中得到了当前的提交的URL,我想在后面加一个参数、并且跳转,我试了很多方法都不可以。请名师指点

解决方案 »

  1.   

    HttpRequestWrapper 覆盖 getParameterNames() 这类的方法,多添加一个你的 参数进去。
      

  2.   

    写错了 HttpServletRequestWrapper . Servlet 标准库 中的,可以找个 源码看看 。
      

  3.   

    首先谢谢这个大哥啊,可是我去看了,HttpServletRequestWrapper 累得方法基本和HttpServletRequest的方法基本相同。没有覆盖参数的方法啊。谢谢大哥给提供一段完整的代码吧
      

  4.   

    要让他完全正常工作还需要覆盖很多方法并提供自定义类,还得防止被修改,因为 parameters 是只读的。package net.vicp.infoman.commons;import java.util.Map;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;public class RequestWrapper extends HttpServletRequestWrapper {
    private final Param[] params; public static class Param {
    private final String name; private final String[] values; public Param(String name, String[] values) {
    this.name = name;
    this.values = values;
    } public String encodeURL() {
    if (!isValid())
    return new String(); StringBuffer pairs = new StringBuffer();
    for (int i = 0; i < values.length; i++) {
    // if value contains '%' ,'?' or Chinese Characters ,
    // please ESCAPE them first.
    if (values[i] != null && values[i].trim().length() > 0)
    pairs.append('?').append(name).append('=')
    .append(values[i]);
    } return pairs.toString();
    } public boolean isValid() {// test if this entry is not empty or null.
    if (name == null || name.trim().length() == 0)
    return false; if (values == null || values.length == 0)
    return false; for (int i = 0; i < values.length; i++) {
    if (values[i] != null && values[i].trim().length() > 0)
    return true;
    } return false;
    } } public RequestWrapper(HttpServletRequest request, Param[] params) {
    super(request);
    this.params = params;
    } @Override
    public String getQueryString() {
    String url = super.getQueryString(); if (params == null || params.length == 0)
    return url; if (url == null)
    url = ""; StringBuffer q = new StringBuffer(); for (int i = 0; i < this.params.length; i++) {
    if (!params[i].isValid())
    continue;
    q.append(params[i].encodeURL());
    } if (url.indexOf('?') == -1)
    q.setCharAt(0, '?'); return url + q;
    } @SuppressWarnings("unchecked")
    @Override
    public String getParameter(String field) {
    Map<String, String> params = super.getParameterMap();
    if (params.containsKey(field))
    return params.get(field); return getInternalValue(field);
    } @SuppressWarnings("unchecked")
    @Override
    public String[] getParameterValues(String field) {
    Map<String, String[]> oem = super.getParameterMap();
    if (oem.containsKey(field))
    return (String[]) oem.get(field); return getInternalValues(field);
    } private String getInternalValue(String field) {
    if (params == null)// not exists.
    return null; for (int i = 0; i < params.length; i++) {
    if (field.equals(params[i].name)) {
    if (params[i].isValid())
    return params[i].values[0]; // values exists.
    return ""; // exists ,but no values.
    }
    } return null;
    } private String[] getInternalValues(String field) {
    if (params == null)
    return null; for (int i = 0; i < params.length; i++) {
    if (field.equals(params[i].name))
    return params[i].values;
    } return null;
    }}