2016-10-25 5 views
0

JavaでHTTPサーバーを作成し、プレーンストリングを正常に送信して応答を受信しましたが、サーバー上のファイルを読み取る方法がわかりません - 私はクライアント側から投稿した、私はBufferedReaderとInputStreamのコードを試みたが、ブラウザは私のページをロードし続け、何も表示されません。Java Httpサーバー - クライアントから送信されたサーバー上のxmlファイルを読み取る方法

サーバーサイドコード:

public class Server { 

public static void main(String[] args) throws Exception { 

    HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); 
    server.createContext("/ahmer", new MyHandler()); 
    server.setExecutor(null); 
    server.start(); 

}

static class MyHandler implements HttpHandler { 
    @Override 
    public void handle(HttpExchange t) throws IOException { 


     String response = "Success"; 
     t.sendResponseHeaders(200, response.length()); 
     OutputStream os = t.getResponseBody(); 
     os.write(response.getBytes()); 
     os.close(); 

    } 
} 

}

クライアント側コード:

 URL url = new URL("http://localhost:8080/ahmer"); 
     HttpURLConnection con = (HttpURLConnection)url.openConnection(); 
     String document = "C:\\ahmer.xml"; 
     FileReader fr = new FileReader(document); 
     // specify that we will send output and accept input 
     con.setDoInput(true); 
     con.setDoOutput(true); 
     char[] buffer = new char[1024*10]; 
     int b_read = 0; 
     con.setRequestProperty ("Content-Type", "text/xml"); 
     con.setRequestProperty("SOAPAction","MSMQMessage"); 
     con.setRequestProperty("Proxy-Accept","NonInteractiveClient"); 
     con.setRequestProperty("CONNECTION", "close"); 
     con.setRequestProperty("CACHE-CONTROL", "no-cache"); 
     con.setRequestProperty("USER-AGENT", "OpenTV-iAdsResponder_1_0"); 
     OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream()); 
     while ((b_read = fr.read(buffer)) != -1) { 
      writer.write(buffer, 0, b_read); 
     } 
     writer.flush(); 
     writer.close(); 
     fr.close(); 
     int i = con.getResponseCode(); 
     rs=String.format("Response code: %d",i); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet requests = new HttpGet("http://localhost:8080/ahmer"); 
     HttpResponse rss = client.execute(requests); 
     String responseAsString = EntityUtils.toString(rss.getEntity()); 
     con.disconnect(); 

答えて

0

ここに私のコードは、クライアントからサーバーに送信されたXMLファイルを読むことです。

static class MyHandler implements HttpHandler { 
    @Override 
    public void handle(HttpExchange t) throws IOException { 

     InputStream xml = t.getRequestBody(); 

     final char[] buffer = new char[1024]; 
     final StringBuilder out = new StringBuilder(); 
     try (Reader in = new InputStreamReader(xml, "UTF-8")) { 
     for (;;) { 
      int rsz = in.read(buffer, 0, buffer.length); 
      if (rsz < 0) 
       break; 
      out.append(buffer, 0, rsz); 
     } 
    } 
    catch (UnsupportedEncodingException ex) { 
     /* ... */ 
    } 
    catch (IOException ex) { 
     /* ... */ 
    } 
}