code: public PathMatcher.PathMatch<T> match(String path){
  		if (!exactPathMatches.isEmpty()) {
  			T match = getExactPath(path);
  			if (match != null) {
  				UndertowLogger.REQUEST_LOGGER.debugf("Matched exact path %s", path);
  				return new PathMatcher.PathMatch<>(path, "", match);
  			}
  		}
  
  		int length = path.length();
  		final int[] lengths = this.lengths;
  		for (int i = 0; i < lengths.length; ++i) {
  			int pathLength = lengths[i];
  			if (pathLength == length) {
  				SubstringMap.SubstringMatch<T> next = paths.get(path, length);
  				if (next != null) {
  					UndertowLogger.REQUEST_LOGGER.debugf("Matched prefix path %s for path %s", next.getKey(), path);
  					return new PathMatcher.PathMatch<>(path, "", next.getValue());
  				}
  			} else if (pathLength < length) {
  				char c = path.charAt(pathLength);
  				if (c == '/') {
  
  					//String part = path.substring(0, pathLength);
  					SubstringMap.SubstringMatch<T> next = paths.get(path, pathLength);
  					if (next != null) {
  						UndertowLogger.REQUEST_LOGGER.debugf("Matched prefix path %s for path %s", next.getKey(), path);
  						return new PathMatcher.PathMatch<>(next.getKey(), path.substring(pathLength), next.getValue());
  					}
  				}
  			}
  		}
  		UndertowLogger.REQUEST_LOGGER.debugf("Matched default handler path %s", path);
  		return new PathMatcher.PathMatch<>("", path, defaultHandler);
  	}
docs: Matches a path against the registered handlers.
  @param path The relative path to match
  @return The match match. This will never be null, however if none matched its value field will be