Module  jdk.httpserver

Class HttpServer

  • 已知直接子类:
    HttpsServer


    public abstract class HttpServer
    extends Object
    这个类实现了一个简单的HTTP服务器。 HttpServer绑定到一个IP地址和端口号,并侦听从该地址的客户端传入的TCP连接。 子类HttpsServer实现一个处理HTTPS请求的服务器。

    一个或多个HttpHandler对象必须与服务器相关联才能处理请求。 每个这样的HttpHandler都注册了一个根URI路径,该路径代表该服务器上应用程序或服务的位置。 处理程序到HttpServer的映射由一个HttpContext对象封装。 HttpContexts是通过调用createContext(String,HttpHandler)创建的。 任何无法找到任何处理程序的请求都将被拒绝。 线程的管理可以通过提供一个Executor对象在该对象的外部进行。 如果没有提供默认实现。

    请求URI映射到HttpContext路径

    当接收到HTTP请求时,通过查找路径是请求URI路径的最长匹配前缀的上下文来定位适当的HttpContext(和处理程序)。 路径是字面上匹配的,这意味着字符串将被敏感地进行比较,并且没有转换到或来自任何编码形式。 例如。 给出配置了以下HttpContexts的HttpServer。

    description Context Context path ctx1 "/" ctx2 "/apps/" ctx3 "/apps/foo/"

    下表显示了一些请求URI,以及哪些上下文匹配。

    description Request URI Matches context "http://foo.com/apps/foo/bar" ctx3 "http://foo.com/apps/Foo/bar" no match, wrong case "http://foo.com/apps/app1" ctx2 "http://foo.com/foo" ctx1

    关于套接字积压的注意事项

    当绑定到地址和端口号时,应用程序也可以指定一个整数backlog参数。 这表示系统将内部队列的传入TCP连接的最大数量。 连接在等待HttpServer接受时排队等待。 达到极限时,底层TCP实现可能会拒绝进一步的连接(或可能被忽略)。 设置正确的积压值是TCP层中有效资源使用(不要设置太高)并允许输入请求的足够吞吐量(不要将其设置得太低)之间的妥协。

    从以下版本开始:
    1.6
    • 构造方法详细信息

      • HttpServer

        protected HttpServer​()
    • 方法详细信息

      • create

        public static HttpServer create​(InetSocketAddress addr,
                                        int backlog)
                                 throws IOException
        创建一个HttpServer实例,它将绑定到指定的InetSocketAddress (IP地址和端口号)也可以指定最大的积压。 这是在侦听套接字上允许的排队入站连接的最大数量。 超过此限制的排队TCP连接可能被TCP实现拒绝。 HttpServer从当前安装的HttpServerProvider获取
        参数
        addr - 要监听的地址,如果是 null那么bind()必须调用来设置地址
        backlog - 套接字积压。 如果该值小于或等于零,则使用系统默认值。
        异常
        BindException - 如果服务器无法绑定到请求的地址,或者服务器已经绑定。
        IOException
      • bind

        public abstract void bind​(InetSocketAddress addr,
                                  int backlog)
                           throws IOException
        将当前未绑定的HttpServer绑定到给定的地址和端口号。 也可以指定最大积压。 这是在侦听套接字上允许的排队入站连接的最大数量。 超过此限制的排队TCP连接可能被TCP实现拒绝。
        参数
        addr - 要收听的地址
        backlog - 套接字积压。 如果该值小于或等于零,则使用系统默认值。
        异常
        BindException - 如果服务器无法绑定到请求的地址或服务器已绑定。
        NullPointerException - 如果addr是 null
        IOException
      • start

        public abstract void start​()
        在新的后台线程中启动此服务器。 后台线程继承了调用者的优先级,线程组和上下文类加载器。
      • setExecutor

        public abstract void setExecutor​(Executor executor)
        设置此服务器的Executor对象。 执行人必须在start()被调用之前建立。 所有HTTP请求都是在给予执行者的任务中处理的。 如果没有调用此方法(在start()之前)或使用null执行程序调用该null ,则使用默认实现,该实现使用由start()方法创建的线程。
        参数
        executor - 执行者设置,或 null作为默认实现
        异常
        IllegalStateException - 如果服务器已经启动
      • getExecutor

        public abstract Executor getExecutor​()
        如果指定了 setExecutor(Executor) ,则返回此服务器的Executor对象,如果没有指定,则 返回 null
        结果
        执行人员为此服务器建立或 null如果未设置。
      • stop

        public abstract void stop​(int delay)
        通过关闭监听套接字来停止此服务器,并禁止任何新的交换机被处理。 然后,该方法将阻塞,直到所有当前的交换处理程序已经完成,或者大约延迟秒数过去(取决于哪个更早发生)。 然后,所有打开的TCP连接都关闭,由start()创建的后台线程退出,方法返回。 一旦停止,HttpServer将无法重新使用。
        参数
        delay - 等待交易完成的最长时间(秒)。
        异常
        IllegalArgumentException - 如果延迟小于零。
      • createContext

        public abstract HttpContext createContext​(String path,
                                                  HttpHandler handler)
        创建一个HttpContext。 HttpContext表示从这个HttpServer的URI路径到交换处理程序的映射。 一旦创建,服务器为路径接收的所有请求将通过调用给定的处理程序对象来处理。 上下文由路径标识,稍后可以使用removeContext(String)方法从服务器中删除。

        该路径指定此上下文的根URI路径。 路径的第一个字符必须是'/'。

        类概述描述了HttpContext实例的传入请求URI如何为mapped

        参数
        path - 将上下文关联的根URI路径
        handler - 调用传入请求的处理程序。
        异常
        IllegalArgumentException - 如果路径无效,或者如果此路径已存在上下文
        NullPointerException - 如果任一路径或处理程序是 null
      • createContext

        public abstract HttpContext createContext​(String path)
        创建一个HttpContext,而不会最初指定一个处理程序。 稍后必须使用HttpContext.setHandler(HttpHandler)指定处理程序。 HttpContext表示从这个HttpServer的URI路径到交换处理程序的映射。 一旦创建,并且当处理程序被设置时,服务器为路径接收到的所有请求将通过调用处理程序对象来处理。 上下文由路径标识,稍后可以使用removeContext(String)方法从服务器中删除。

        该路径指定此上下文的根URI路径。 路径的第一个字符必须是'/'。

        类概述描述了HttpContext实例的传入请求URI如何为mapped

        参数
        path - 将上下文关联的根URI路径
        异常
        IllegalArgumentException - 如果路径无效,或者该路径的上下文已存在
        NullPointerException - 如果路径是 null
      • removeContext

        public abstract void removeContext​(String path)
                                    throws IllegalArgumentException
        从服务器中删除由给定路径标识的上下文。 删除上下文不会影响当前正在处理的交换,但会阻止新的上下文被接受。
        参数
        path - 要删除的处理程序的路径
        异常
        IllegalArgumentException - 如果没有与此路径对应的处理程序存在。
        NullPointerException - 如果路径是 null
      • removeContext

        public abstract void removeContext​(HttpContext context)
        从服务器中删除给定的上下文。 删除上下文不会影响当前正在处理的交换,但会阻止新的上下文被接受。
        参数
        context - 要删除的上下文
        异常
        NullPointerException - 如果上下文是 null
      • getAddress

        public abstract InetSocketAddress getAddress​()
        返回服务器正在侦听的地址
        结果
        the address/port number the server is listening on