package com.founderdpt.comm.xworld.plugin.struts2.util;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;
/**
* HttpRequestParser工具类
*/
public class HttpRequestParser {
/**
* 分析url字符串,采用utf-8解码
*
* @param urlString
* @return
*/
public static Request parse(String urlString) {
return parse(urlString, "utf-8");
}
/**
* 分析url字符串,指定字符集进行解码
*
* @param urlString
* @param enc
* @return
*/
public static Request parse(String urlString, String enc) {
if (urlString == null || urlString.length() == 0) {
return new Request();
}
int questIndex = urlString.indexOf('?');
if (questIndex == -1) {
return new Request(urlString);
}
String url = urlString.substring(0, questIndex);
String queryString = urlString.substring(questIndex + 1, urlString
.length());
return new Request(url, getParamsMap(queryString, enc));
}
private static Map<String, String[]> getParamsMap(String queryString,
String enc) {
Map<String, String[]> paramsMap = new HashMap<String, String[]>();
if (queryString != null && queryString.length() > 0) {
int ampersandIndex, lastAmpersandIndex = 0;
String subStr, param, value;
String[] paramPair, values, newValues;
do {
ampersandIndex = queryString.indexOf('&', lastAmpersandIndex) + 1;
if (ampersandIndex > 0) {
subStr = queryString.substring(lastAmpersandIndex,
ampersandIndex - 1);
lastAmpersandIndex = ampersandIndex;
} else {
subStr = queryString.substring(lastAmpersandIndex);
}
paramPair = subStr.split("=");
param = paramPair[0];
value = paramPair.length == 1 ? "" : paramPair[1];
try {
value = URLDecoder.decode(value, enc);
} catch (UnsupportedEncodingException ignored) {
}
if (paramsMap.containsKey(param)) {
values = paramsMap.get(param);
int len = values.length;
newValues = new String[len + 1];
System.arraycopy(values, 0, newValues, 0, len);
newValues[len] = value;
} else {
newValues = new String[] { value };
}
paramsMap.put(param, newValues);
} while (ampersandIndex > 0);
}
return paramsMap;
}
}