http://www.rgagnon.com/javadetails/java-have-a-simple-http-server.html
http://blog.youkuaiyun.com/defonds/article/details/6314723
Since Java 1.6, there's a built-in HTTP server included with the JDK.
The HttpServer provides a simple high-level Http server API, which can be used to build embedded HTTP servers.
import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; /* * a simple static http server*/ public class SimpleHttpServer { public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); server.createContext("/test", new MyHandler()); server.setExecutor(null); // creates a default executor server.start(); } static class MyHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException { String response = "Welcome Real's HowTo test page"; t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); } } }

The next HttpServer provides 2 contexts :
- http://localhost:8000/info to display an informative message.
- http://localhost:8000/get to download a specific PDF to the browser.
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import com.sun.net.httpserver.Headers; public class SimpleHttpServer { public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); server.createContext("/info", new InfoHandler()); server.createContext("/get", new GetHandler()); server.setExecutor(null); // creates a default executor server.start(); } static class InfoHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException { String response = "Use /get to download a PDF"; t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); } } static class GetHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException { // add the required response header for a PDF file Headers h = t.getResponseHeaders(); h.add("Content-Type", "application/pdf"); // a PDF (you provide your own!) File file = new File ("c:/temp/doc.pdf"); byte [] bytearray = new byte [(int)file.length()]; FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); bis.read(bytearray, 0, bytearray.length); // ok, we are ready to send the response. t.sendResponseHeaders(200, file.length()); OutputStream os = t.getResponseBody(); os.write(bytearray,0,bytearray.length); os.close(); } } }
导入com.sun.net.httpserver可能会报错,用如下方法解决。
Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案
Eclipse 编译时报错:
Access restriction:The type JPEGCodec is not accessible due to restriction on required library C:/Program Files/Java/jre6/lib/rt.jar
解决方法:
Project -> Properties -> libraries,
先 remove 掉 JRE System Library,然后再 Add Library 重新加入。