Adding Content-Type Headers to Java HTTP echo server -


i'm playing httpservers , running issue. need add contenttype headers response, when client gets err_empty_response.

if remove:

headers.add("content-type", "text/html"); 

then server works fine, need pass ctype headers app. gives? how include content-type headers?

/* * echoserver.java *  * accept http request , echo http response. * * copyright (c) 2005 sun microsystems, inc * copyright (c) 2008 operational dynamics consulting, pty ltd *  * code in file made available authors under * terms of "gnu general public licence, version 2" see licence file * terms governing usage , redistribution. */  /* * code simple derivation of example in package * documentation com.sun.net.httpserver, found in file * jdk/src/share/classes/com/sun/net/httpserver/package-info.java shipped * openjdk 1.6 b08 code drop. used under terms of gplv2. */  import static java.net.httpurlconnection.http_ok;  import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.net.inetsocketaddress; import java.net.urldecoder; import java.util.list;  import com.sun.net.httpserver.headers; import com.sun.net.httpserver.httpexchange; import com.sun.net.httpserver.httpexchange.*; import com.sun.net.httpserver.httphandler; import com.sun.net.httpserver.httpserver;  /** * echo body of http request http response. merely  * simple exercise of secret sun web server. configured, url * access http://localhost:8000/echo. *  * @author andrew cowie */ public final class test {     public static void main(string[] args) throws ioexception {         final inetsocketaddress addr;         final httpserver server;          addr = new inetsocketaddress(8000);          server = httpserver.create(addr, 10);         server.createcontext("/echo", new echohandler());         server.start();     } }  class echohandler implements httphandler {     public void handle(httpexchange t) throws ioexception {         final inputstream is;         final outputstream os;         stringbuilder buf;         int b;         final string request, response;          buf = new stringbuilder();      /*      * request body , decode it. regardless of      * doing, apparently considered correct form consume      * bytes inputstream. if don't, closing      * outputstream cause occur      */          = t.getrequestbody();          while ((b = is.read()) != -1) {             buf.append((char) b);         }          is.close();          if (buf.length() > 0) {             request = urldecoder.decode(buf.tostring(), "utf-8");         } else {             request = null;         }      /*      * construct our response:      */          buf = new stringbuilder();         buf.append("<html><head><title>http echo server</title></head><body>");         buf.append("<p><pre>");         buf.append(t.getrequestmethod() + " " + t.getrequesturi() + " " + t.getprotocol() + "\n");      /*      * process request headers. bit involved due      * complexity arising fact headers can repeated.      */          headers headers = t.getrequestheaders();          (string name : headers.keyset()) {             list<string> values = headers.get(name);              (string value : values) {                 buf.append(name + ": " + value + "\n");             }         }      /*      * if there actual body request, add it:      */          if (request != null) {             buf.append("\n");             buf.append(request);         }          buf.append("</pre></p>");         buf.append("</body></html>\n");          response = buf.tostring();         system.out.println(response);      /*      * , send response. have instead done      * dynamically, using 0 response size (forcing chunked      * encoding) , writing bytes of response directly      * outputstream, building string first allows know      * exact length can send response known size. better :)      */          headers.add("content-type", "text/html");         t.sendresponseheaders(http_ok, response.length());          os = t.getresponsebody();          os.write(response.getbytes());      /*      * , we're done!      */          os.close();         t.close();     } } 

you extracting headers request , changing request headers doesn't make sense. need modify response headers. can adding following

t.getresponseheaders().add("content-type", "text/html"); 

Comments