2010-08-04 17 views
5

मैं एक छोटा जावा ऐप लिख रहा हूं जो एक http सेवा लागू करता है जो क्लाइंट से http पोस्ट कमांड प्राप्त करता है।पोस्ट अनुरोध मान पढ़ें HttpHandler

जिस कक्षा का मैं उपयोग करने के लिए उपयोग कर रहा हूं वह है com.sun.net में HttpHandler और HttpServer। पैकेज।

अब मैं एक हैंडल (एचटीपीएक्सचेंज एक्सचेंज) फ़ंक्शन को कार्यान्वित कर रहा हूं जो अनुरोध को संभालता है, और मुझे अनुरोध द्वारा प्राप्त पोस्ट मानों को पढ़ने में ट्रबलल है क्योंकि मेरे पास इन मानों के लिए केवल एक ही पहुंच है HttpExchange.getResponseBody के माध्यम से() जो सिर्फ एक आउटपुट स्ट्रीम है।

मैं txt पोस्ट मानों और अपलोड की गई फ़ाइलों को पार्स करना चाहता हूं।

कृपया मदद करें।

धन्यवाद।

उत्तर

9

में एक बुनियादी HTTP सर्वर उदाहरण मैं वर्गों है कि मेरी परियोजना Sceye-Fi, com.sun.net.httpserver वर्गों है कि जावा 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

+0

@ सेविंग हां, नाम भी यूआरएल-डीकोड किया जा सकता है –

2

एक विकल्प HttpServiceHttpCore से उपयोग करेगा।

वहाँ documentation

+0

वहाँ httpcore में कोई HttpServer है। –

+0

@amadeus क्षमा करें, मेरा मतलब है 'HttpService'। मैंने जवाब अपडेट कर लिया है। – fglez

संबंधित मुद्दे