2010-08-04 69 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