美文网首页
Http系列一:通过Oracle HttpServer构建HTT

Http系列一:通过Oracle HttpServer构建HTT

作者: 我知他风雨兼程途径日暮不赏 | 来源:发表于2020-11-15 20:52 被阅读0次

    代码github地址:https://github.com/LynHB/ProjectA/blob/master/src/main/java/study/http/HttpServerDemo.java

    1. HttpServer类说明

    1.1 介绍

    该类实现了一个简单的HTTP服务器。HttpServer被绑定到一个IP地址和端口号,并侦听这个地址上来自Client的传入TCP连接。子类HttpsServer实现了一个处理HTTPS请求的服务器。
    为了处理请求,一个或多个HttpHandler对象必须与服务器相关联。每个这样的HttpHandler都注册了一个根URI路径,该路径表示应用程序或服务在该服务器上的位置。处理程序到HttpServer的映射由HttpContext对象封装。HttpContexts是通过调用createContext(String,HttpHandler)来创建的。任何找不到处理程序的请求都将以404响应被拒绝。线程的管理可以通过提供Executor对象在此对象外部完成。如果没有提供,则使用默认提供。

    1.2 常用方法

    API文档

    方法名 返回类型 方法说明
    bind(InetSocetAddr addr, int backlog) void 给未进行IP和端口绑定的HttpServer进行绑定,并可设置backlog
    create() HttpServer 创建一个HttpServer实例,但是未进行初始化和未绑定对应本地地址和端口,需要结合bind(InetSocetAddr addr, int backlog)使用
    create(InetSocetAddr addr, int backlog) HttpServer 创建对应实例,绑定IP和端口信息,并指定backlog数
    createContext(String path,HttpHandler handle) HttpContext 通过URI绑定对应的handle控制器,创建HTTP上下文。
    getAddress() InetSocketAddress 返回HttpServer相关绑定信息
    getExecutor() Executor 获取线程池对象,通过setExecutor(Executor)设置,如果没设置返回null
    start void 在新的后台线程中启动此服务器。
    stop void 通过关闭监听套接字并禁止处理任何新的exchange来停止此服务器。

    1.3 简单的Demo

    即可使用localhost:8888 进行访问。

    /*
        实现HttpHandle处理Http请求
     */
    public class HttpServerDemo implements HttpHandler {
        public static void main(String[] args) throws IOException {
            // 绑定本地指定8888
            HttpServer httpServer = HttpServer.create(new InetSocketAddress(InetAddress.getByName("0.0.0.0"),8888),0);
            // 设置上下文信息
            httpServer.createContext("/",new HttpServerDemo());
            // 启动服务
            httpServer.start();
    
        }
    
        @Override
        public void handle(HttpExchange httpExchange) throws IOException {
            String response = httpExchange.getRequestURI()+":test message";
            httpExchange.sendResponseHeaders(200, 0);
            OutputStream os = httpExchange.getResponseBody();
            os.write(response.getBytes(StandardCharsets.UTF_8));
            os.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:Http系列一:通过Oracle HttpServer构建HTT

          本文链接:https://www.haomeiwen.com/subject/qknnbktx.html