栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

仅使用Java SE API的Java中的简单HTTP服务器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

仅使用Java SE API的Java中的简单HTTP服务器

从Java SE 6开始,Sun Oracle JRE中内置了HTTP服务器。该com.sun.net.httpserver包的摘要概述了参与类和包含的例子。

这是一个从他们的文档中复制的启动示例(不过,所有尝试编辑它的人,因为它是一段丑陋的代码,请不要这样做,这是一个复制粘贴,不是我的,此外,除非更改了它们,否则切勿编辑引号在原始来源中)。你可以只复制’n’paste’n’在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()
方法也必须显式指定字符集,然后在响应头中指定该字符集。las,尽管误导了初学者,但这毕竟只是一个基本的启动示例。

执行它并转到http:// localhost:8000 / test,你将看到以下响应:

这是回应

关于使用

com.sun.*
类,请注意,这与某些开发人员的看法相反,众所周知的FAQ 为什么开发人员不应编写调用“ sun”程序包的程序绝对不禁止这样做。该FAQ 与Oracle JRE内部使用的
sun.*
软件包(例如sun.misc.base64Enprer)有关(因此,当你在其他JRE上运行应用程序时,它会杀死你的应用程序),而不是
com.sun.*
软件包。Sun / Oracle像其他公司(例如Apache等)一样,也只是在Java SE API之上自己开发软件。
com.sun.*
仅在涉及某个Java API 的实现(例如GlassFish(Java EE impl),Mojarra(JSF impl),Jersey(JAX-RS impl)等)时,才鼓励(但不禁止)使用类。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411055.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号