簡體   English   中英

Java和CGI-如何從URL正確解析文件名和QUERY_STRING?

[英]Java and CGI - how to properly parse a filename and a QUERY_STRING from a URL?

在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

這就是Java Servlet解析GET參數的方式

http://grepcode.com/file/repo1.maven.org/maven2/javax.servlet/servlet-api/2.5/javax/servlet/http/HttpUtils.java#HttpUtils.parseQueryString%28java.lang.String%29

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.htmlhttp://www.java2s.com/Code/Java/Network-Protocol/HttpParser.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM