模块  jdk.httpserver

Class HttpServer

  • 已知直接子类:
    HttpsServer

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

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

    请求URI映射到HttpContext路径

    当收到HTTP请求时,通过查找路径是请求URI路径的最长匹配前缀的上下文来定位相应的HttpContext(和处理程序)。 路径在字面上是匹配的,这意味着字符串在区分大小写的情况下进行比较,并且不会转换为任何编码形式。 例如。 给定HttpServer配置了以下HttpContexts。

    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 Executor调用此方法,则使用默认实现,该实现使用由start()方法创建的线程。
        参数
        executor - 要设置的执行程序,或 null用于默认实现
        异常
        IllegalStateException - 如果服务器已启动
      • getExecutor

        public abstract Executor getExecutor()
        返回此服务器的Executor对象(如果使用 setExecutor(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上的交换处理程序的映射。 一旦创建,服务器为路径接收的所有请求都将通过调用给定的处理程序对象来处理。 上下文由路径标识,稍后可以使用removeContext(String)方法从服务器中删除。

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

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

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

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

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

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

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

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