2010-08-04 94 views
5

我在寫一個小的Java應用程序,它實現了一個http服務,它接收來自客戶端的http post命令。閱讀發佈請求值HttpHandler

我用來實現所有這些的類是com.sun.net中的HttpHandler和HttpServer。包。

現在我正在實現一個處理請求的句柄(HttpExchange交換)函數,並且我正在讀取請求接收的post值,因爲我對這些值的唯一訪問是通過HttpExchange.getResponseBody ()這只是一個輸出流。

我正在尋找解析txt發佈的值和上傳的文件。

請幫忙。

謝謝。

回答

9

一個基本的HTTP服務器的例子,我寫了一個處理我的項目Sceye-Fi,使用該com.sun.net.httpserver類,都與Java 6的HTTP服務器,上傳請求類從收到上傳照片一張Eye-Fi卡。

這可以幫助文件上傳(多部分帖子)。

對於非多後,你需要做這樣的事情:

// determine encoding 
Headers reqHeaders = exchange.getRequestHeaders(); 
String contentType = reqHeaders.getFirst("Content-Type"); 
String encoding = "ISO-8859-1"; 
if (contentType != null) { 
    Map<String,String> parms = ValueParser.parse(contentType); 
    if (parms.containsKey("charset")) { 
     encoding = parms.get("charset"); 
    } 
} 
// read the query string from the request body 
String qry; 
InputStream in = exchange.getRequestBody(); 
try { 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    byte buf[] = new byte[4096]; 
    for (int n = in.read(buf); n > 0; n = in.read(buf)) { 
     out.write(buf, 0, n); 
    } 
    qry = new String(out.toByteArray(), encoding); 
} finally { 
    in.close(); 
} 
// parse the query 
Map<String,List<String>> parms = new HashMap<String,List<String>>(); 
String defs[] = qry.split("[&]"); 
for (String def: defs) { 
    int ix = def.indexOf('='); 
    String name; 
    String value; 
    if (ix < 0) { 
     name = URLDecoder.decode(def, encoding); 
     value = ""; 
    } else { 
     name = URLDecoder.decode(def.substring(0, ix), encoding); 
     value = URLDecoder.decode(def.substring(ix+1), encoding); 
    } 
    List<String> list = parms.get(name); 
    if (list == null) { 
     list = new ArrayList<String>(); 
     parms.put(name, list); 
    } 
    list.add(value); 
} 
+0

你爲什麼不把名字傳給URLDecoder? – ceving 2013-04-23 17:52:27

+0

@ceving是的,該名稱也可以被URL解碼 – 2015-06-08 06:00:59

2

另一種方法是使用的HttpService

有一個在documentation

+0

中有沒有的HttpCore HttpServer的。 – 2012-09-17 23:22:33

+0

@amadeus對不起,我的意思是'HttpService'。我已經更新了答案。 – fglez 2012-09-18 07:21:24