Class URIUtil

java.lang.Object
org.eclipse.jetty.util.URIUtil
All Implemented Interfaces:
Cloneable

public class URIUtil extends Object implements Cloneable
URI Utility methods.

This class assists with the decoding and encoding or HTTP URI's. It differs from the java.net.URL class as it does not provide communications ability, but it does assist with query string formatting.

See Also:
  • Field Details

  • Method Details

    • encodePath

      public static String encodePath(String path)
      Encode a URI path. This is the same encoding offered by URLEncoder, except that the '/' character is not encoded.
      Parameters:
      path - The path the encode
      Returns:
      The encoded path
    • encodePath

      public static StringBuilder encodePath(StringBuilder buf, String path)
      Encode a URI path.
      Parameters:
      path - The path the encode
      buf - StringBuilder to encode path into (or null)
      Returns:
      The StringBuilder or null if no substitutions required.
    • encodeSpaces

      public static String encodeSpaces(String str)
      Encode a raw URI String and convert any raw spaces to their "%20" equivalent.
      Parameters:
      str - input raw string
      Returns:
      output with spaces converted to "%20"
    • encodeSpecific

      public static String encodeSpecific(String str, String charsToEncode)
      Encode a raw String and convert any specific characters to their URI encoded equivalent.
      Parameters:
      str - input raw string
      charsToEncode - the list of raw characters that need to be encoded (if encountered)
      Returns:
      output with specified characters encoded.
    • decodeSpecific

      public static String decodeSpecific(String str, String charsToDecode)
      Decode a raw String and convert any specific URI encoded sequences into characters.
      Parameters:
      str - input raw string
      charsToDecode - the list of raw characters that need to be decoded (if encountered), leaving all other encoded sequences alone.
      Returns:
      output with specified characters decoded.
    • encodeString

      public static StringBuilder encodeString(StringBuilder buf, String path, String encode)
      Encode a URI path.
      Parameters:
      path - The path the encode
      buf - StringBuilder to encode path into (or null)
      encode - String of characters to encode. % is always encoded.
      Returns:
      The StringBuilder or null if no substitutions required.
    • decodePath

      public static String decodePath(String path)
    • decodePath

      public static String decodePath(String path, int offset, int length)
    • addEncodedPaths

      public static String addEncodedPaths(String p1, String p2)
      Add two encoded URI path segments. Handles null and empty paths, path and query params (eg ?a=b or ;JSESSIONID=xxx) and avoids duplicate '/'
      Parameters:
      p1 - URI path segment (should be encoded)
      p2 - URI path segment (should be encoded)
      Returns:
      Legally combined path segments.
    • addPaths

      public static String addPaths(String p1, String p2)
      Add two Decoded URI path segments. Handles null and empty paths. Path and query params (eg ?a=b or ;JSESSIONID=xxx) are not handled
      Parameters:
      p1 - URI path segment (should be decoded)
      p2 - URI path segment (should be decoded)
      Returns:
      Legally combined path segments.
    • addPathQuery

      public static String addPathQuery(String path, String query)
      Add a path and a query string
      Parameters:
      path - The path which may already contain contain a query
      query - The query string or null if no query to be added
      Returns:
      The path with any non null query added after a '?' or '&' as appropriate.
    • getUriLastPathSegment

      public static String getUriLastPathSegment(URI uri)
      Given a URI, attempt to get the last segment.

      If this is a jar:file:// style URI, then the JAR filename is returned (not the deep !/path location)

      Parameters:
      uri - the URI to look in
      Returns:
      the last segment.
    • parentPath

      public static String parentPath(String p)
      Return the parent Path. Treat a URI like a directory path and return the parent directory.
      Parameters:
      p - the path to return a parent reference to
      Returns:
      the parent path of the URI
    • canonicalURI

      public static String canonicalURI(String uri)
      Convert a partial URI to a canonical form.

      All segments of "." and ".." are factored out. Null is returned if the path tries to .. above its root.

      Parameters:
      uri - the encoded URI from the path onwards, which may contain query strings and/or fragments
      Returns:
      the canonical path, or null if path traversal above root.
      See Also:
    • canonicalEncodedPath

      @Deprecated public static String canonicalEncodedPath(String path)
      Deprecated.
      Parameters:
      path - the encoded URI from the path onwards, which may contain query strings and/or fragments
      Returns:
      the canonical path, or null if path traversal above root.
    • canonicalPath

      public static String canonicalPath(String path)
      Convert a decoded URI path to a canonical form.

      All segments of "." and ".." are factored out. Null is returned if the path tries to .. above its root.

      Parameters:
      path - the decoded URI path to convert. Any special characters (e.g. '?', "#") are assumed to be part of the path segments.
      Returns:
      the canonical path, or null if path traversal above root.
      See Also:
    • compactPath

      public static String compactPath(String path)
      Convert a path to a compact form. All instances of "//" and "///" etc. are factored out to single "/"
      Parameters:
      path - the path to compact
      Returns:
      the compacted path
    • hasScheme

      public static boolean hasScheme(String uri)
      Parameters:
      uri - URI
      Returns:
      True if the uri has a scheme
    • newURI

      public static String newURI(String scheme, String server, int port, String path, String query)
      Create a new URI from the arguments, handling IPv6 host encoding and default ports
      Parameters:
      scheme - the URI scheme
      server - the URI server
      port - the URI port
      path - the URI path
      query - the URI query
      Returns:
      A String URI
    • newURIBuilder

      public static StringBuilder newURIBuilder(String scheme, String server, int port)
      Create a new URI StringBuilder from the arguments, handling IPv6 host encoding and default ports
      Parameters:
      scheme - the URI scheme
      server - the URI server
      port - the URI port
      Returns:
      a StringBuilder containing URI prefix
    • appendSchemeHostPort

      public static void appendSchemeHostPort(StringBuilder url, String scheme, String server, int port)
      Append scheme, host and port URI prefix, handling IPv6 address encoding and default ports
      Parameters:
      url - StringBuilder to append to
      scheme - the URI scheme
      server - the URI server
      port - the URI port
    • appendSchemeHostPort

      public static void appendSchemeHostPort(StringBuffer url, String scheme, String server, int port)
      Append scheme, host and port URI prefix, handling IPv6 address encoding and default ports
      Parameters:
      url - StringBuffer to append to
      scheme - the URI scheme
      server - the URI server
      port - the URI port
    • equalsIgnoreEncodings

      public static boolean equalsIgnoreEncodings(String uriA, String uriB)
    • equalsIgnoreEncodings

      public static boolean equalsIgnoreEncodings(URI uriA, URI uriB)
    • addPath

      public static URI addPath(URI uri, String path)
      Parameters:
      uri - A URI to add the path to
      path - A decoded path element
      Returns:
      URI with path added.
    • addQueries

      public static String addQueries(String query1, String query2)
      Combine two query strings into one. Each query string should not contain the beginning '?' character, but may contain multiple parameters separated by the '&' character.
      Parameters:
      query1 - the first query string.
      query2 - the second query string.
      Returns:
      the combination of the two query strings.
    • getJarSource

      public static URI getJarSource(URI uri)
    • getJarSource

      public static String getJarSource(String uri)