HttpServletRequest.getParameterValues() returns a String[] containing all values of a given HTTP request parameter. Does anyone know if the order o
I've got a problem to extract param-value map from HttpServletRequest in order in accordance with elements on the JSP. I wrote an OrderedRequestMap that parsers an application/x-www-form-urlencoded POST request body.
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
public class OrderedRequestMap extends LinkedHashMap {
private final String encoding;
public OrderedRequestMap(InputStream httpBody, String encoding) throws IOException {
this.encoding = encoding;
fill(httpBody);
}
private void fill(InputStream is) throws IOException {
final InputStreamReader reader = new InputStreamReader(is, "ASCII");
int c;
StringBuilder sb = new StringBuilder(1000);
while ((c = reader.read()) != -1) {
char ch = (char)c;
if (ch == '&') {
put(sb.toString());
sb = new StringBuilder(1000);
} else {
sb.append(ch);
}
}
put(sb.toString());
}
private void put(String parameter) throws UnsupportedEncodingException {
String[] pair = parameter.split("=");
if (pair.length == 0 )
return;
String key = URLDecoder.decode(pair[0], encoding);
String val = EMPTY_STR;
if (pair.length > 1)
val = URLDecoder.decode(pair[1], encoding);
String[] values = get(key);
if (values == null)
values = new String[]{val};
else {
values = Arrays.copyOf(values, values.length+1);
values[values.length - 1] = val;
}
put(key, values);
}
private static final String EMPTY_STR = "";
}
And call it like this
new OrderedRequestMap(request.getInputStream(), request.getCharacterEncoding());
Hope, it helps.