docs: PathMatcher.PathMatch<HostEntry> match(String path){
          int length = path.length();
          final int[] lengths = this.lengths;
          for (int i = 0; i < lengths.length; ++i) {
              int pathLength = lengths[i];
              if (pathLength == length) {
                  HostEntry next = contexts.get(path);
                  if (next != null) {
                      return new PathMatcher.PathMatch<>(path, "", next);
                  }
              } else if (pathLength < length) {
                  char c = path.charAt(pathLength);
                  if (c == '/') {
                      String part = path.substring(0, pathLength);
                      HostEntry next = contexts.get(part);
                      if (next != null) {
                          return new PathMatcher.PathMatch<>(part, path.substring(pathLength), next);
                      }
                  }
              }
          }
          if(defaultHandler.contexts.isEmpty()) {
              return new PathMatcher.PathMatch<>("", path, null);
          }
          return new PathMatcher.PathMatch<>("", path, defaultHandler);
      }