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

2020-11-15  本文已影响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();
    }
}
上一篇下一篇

猜你喜欢

热点阅读