您的位置:首页 > 理论基础 > 计算机网络

Have a simple HTTP server

2013-11-06 18:43 791 查看
http://www.rgagnon.com/javadetails/java-have-a-simple-http-server.html

/article/2585691.html

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();
}
}
}


Compile and execute. To access the local server

,
open a browser at http://localhost:8000/test. 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 重新加入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: