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
Post a Comment