从Java SE 6开始,Sun Oracle JRE中有一个内置的HTTP服务器。Java 9 模块名称是 jdk.httpserver
。com.sun.net.httpserver
包摘要概述了所涉及的类并包含示例。
这是从他们的文档中复制粘贴的启动示例。你可以在Java 6+上运行它。
(对于所有试图编辑它的人来说,因为它是一段丑陋的代码,请不要,这是一个复制粘贴,而不是我的,而且你永远不应该编辑引文,除非它们在原始源代码中发生了变化)
package com.stackoverflow.q3732109;
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;
public class Test {
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 {
@Override
public void handle(HttpExchange t) throws IOException {
String response = "This is the response";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
注意应该是他们的例子中的部分是坏的,它应该是。即使这样,该方法也必须显式指定字符集,然后在响应标头中指定该字符集。唉,尽管误导了首发球员,但这毕竟只是一个基本的开球例子。response.length()
response.getBytes().length
getBytes()
执行它并转到 http://localhost:8000/test,您将看到以下响应:
这是回应
至于使用类,请注意,与一些开发人员的想法相反,这绝对不是众所周知的FAQ为什么开发人员不应该编写调用“sun”包的程序所禁止的。该常见问题解答涉及Oracle JRE内部使用的包(例如),因此当您在另一个JRE上运行它时会杀死您的应用程序),而不是包。Sun/Oracle也只是在Java SE API之上开发软件,就像Apache等其他公司一样。此外,每个JDK中都必须存在这种特性,因此绝对不会像软件包那样出现“可移植性”问题。仅当涉及某个Java API的实现时,才不鼓励使用类(但不禁止),例如GlassFish(Java EE impl),Mojarra(JSF impl),Jersey(JAX-RS impl)等。com.sun.*
sun.*
sun.misc.BASE64Encoder
com.sun.*
HttpServer
sun.*
com.sun.*