在Java中,我希望能够解析URL以将其分解为文件名和QUERY_STRING。
到目前为止,我有以下代码:
if (line != null && !line.trim().equals("")) {
StringTokenizer st = new StringTokenizer(line);
if (st.nextToken().equals("GET") && st.hasMoreTokens()) {
filename = st.nextToken();
if (filename.startsWith("/")) {
filename = filename.substring(1);
if (st.nextToken().equals(".cgi?") && st.hasMoreTokens()) {
queryString = st.nextToken();
}
}
}
}
我特别想要做的是将URL分解为文件名和QUERY_STRING,因为我可以进行exec
调用以使用正确的环境变量运行我的cgi文件。但是,我的解决方案在到达文件名后的问号之前不会终止文件名。有人可以帮我吗?
编辑:基本上,我想从HTTP请求中获取URL,并从URL获取文件名和QUERY_STRING 。
答案 0 :(得分:0)
这是java servlet解析GET参数的方法
static public Hashtable parseQueryString(String s) {
String valArray[] = null;
if (s == null) {
throw new IllegalArgumentException();
}
Hashtable ht = new Hashtable();
StringBuffer sb = new StringBuffer();
StringTokenizer st = new StringTokenizer(s, "&");
while (st.hasMoreTokens()) {
String pair = (String)st.nextToken();
int pos = pair.indexOf('=');
if (pos == -1) {
// XXX
// should give more detail about the illegal argument
throw new IllegalArgumentException();
}
String key = parseName(pair.substring(0, pos), sb);
String val = parseName(pair.substring(pos+1, pair.length()), sb);
if (ht.containsKey(key)) {
String oldVals[] = (String []) ht.get(key);
valArray = new String[oldVals.length + 1];
for (int i = 0; i < oldVals.length; i++)
valArray[i] = oldVals[i];
valArray[oldVals.length] = val;
} else {
valArray = new String[1];
valArray[0] = val;
}
ht.put(key, valArray);
}
return ht;
}
当然,由于此方法是公开的,您可能只想直接使用HttpUtils: - )
更新:对于其他低级别的http解析,我建议http://hc.apache.org/index.html或http://www.java2s.com/Code/Java/Network-Protocol/HttpParser.htm