Class UrlUtils


  • public final class UrlUtils
    extends java.lang.Object
    URL utilities class that makes it easy to create new URLs based off of old URLs without having to assemble or parse them yourself.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String ABOUT
      "about".
      static java.lang.String ABOUT_BLANK
      "about:blank".
      static java.lang.String ABOUT_SCHEME
      "about:".
      static java.net.URL URL_ABOUT_BLANK
      URL for "about:blank".
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.String decode​(java.lang.String escaped)
      Unescapes and decodes the specified string.
      static java.lang.String encodeAnchor​(java.lang.String anchor)
      Encodes and escapes the specified URI anchor string.
      static java.lang.String encodeHash​(java.lang.String hash)
      Encodes and escapes the specified URI hash string.
      static java.lang.String encodeQuery​(java.lang.String query)
      Encodes and escapes the specified URI hash string.
      static java.lang.String encodeQueryPart​(java.lang.String part)  
      static java.net.URL encodeUrl​(java.net.URL url, boolean minimalQueryEncoding, java.nio.charset.Charset charset)
      Encodes illegal characters in the specified URL's path, query string and anchor according to the URL encoding rules observed in real browsers.
      static java.net.URL getUrlWithNewHost​(java.net.URL u, java.lang.String newHost)
      Creates and returns a new URL identical to the specified URL, except using the specified host.
      static java.net.URL getUrlWithNewHostAndPort​(java.net.URL u, java.lang.String newHost, int newPort)
      Creates and returns a new URL identical to the specified URL, except using the specified host.
      static java.net.URL getUrlWithNewPath​(java.net.URL u, java.lang.String newPath)
      Creates and returns a new URL identical to the specified URL, except using the specified path.
      static java.net.URL getUrlWithNewPort​(java.net.URL u, int newPort)
      Creates and returns a new URL identical to the specified URL, except using the specified port.
      static java.net.URL getUrlWithNewProtocol​(java.net.URL u, java.lang.String newProtocol)
      Creates and returns a new URL identical to the specified URL, except using the specified protocol.
      static java.net.URL getUrlWithNewQuery​(java.net.URL u, java.lang.String newQuery)
      Creates and returns a new URL identical to the specified URL, except using the specified query string.
      static java.net.URL getUrlWithNewRef​(java.net.URL u, java.lang.String newRef)
      Creates and returns a new URL identical to the specified URL, except using the specified reference.
      static java.net.URL getUrlWithNewUserName​(java.net.URL u, java.lang.String newUserName)
      Creates and returns a new URL identical to the specified URL but with a changed user name.
      static java.net.URL getUrlWithNewUserPassword​(java.net.URL u, java.lang.String newUserPassword)
      Creates and returns a new URL identical to the specified URL but with a changed user password.
      static java.net.URL getUrlWithoutPathRefQuery​(java.net.URL u)
      Creates and returns a new URL using only the protocol and authority from the given one.
      static java.net.URL getUrlWithoutRef​(java.net.URL u)
      Creates and returns a new URL using only the protocol, authority and path from the given one.
      static java.net.URL getUrlWithProtocolAndAuthority​(java.net.URL u)
      Creates and returns a new URL identical to the specified URL, ignoring path, protocol and query.
      static boolean isSpecialScheme​(java.lang.String scheme)
      Returns true if specified string is a special scheme.
      static boolean isValidScheme​(java.lang.String scheme)
      Returns true if specified string is a valid scheme name.
      static java.lang.String normalize​(java.net.URL url)
      Helper that constructs a normalized url string usable as cache key.
      static java.net.URL removeRedundantPort​(java.net.URL url)
      Removes the well known ports if it can be deduced from protocol.
      static java.lang.String resolveUrl​(java.lang.String baseUrl, java.lang.String relativeUrl)
      Resolves a given relative URL against a base URL.
      static java.lang.String resolveUrl​(java.net.URL baseUrl, java.lang.String relativeUrl)
      Resolves a given relative URL against a base URL.
      static boolean sameFile​(java.net.URL u1, java.net.URL u2)
      More or less the same as sameFile(URL, URL) but without resolving the host to an IP address for comparing.
      static java.net.URI toURI​(java.net.URL url, java.lang.String query)
      Constructs a URI using the specified URL.
      static java.net.URL toUrlSafe​(java.lang.String url)
      Constructs a URL instance based on the specified URL string, taking into account the fact that the specified URL string may represent an "about:..."
      static java.net.URL toUrlUnsafe​(java.lang.String url)
      Constructs a URL instance based on the specified URL string, taking into account the fact that the specified URL string may represent an "about:..."
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • ABOUT_SCHEME

        public static final java.lang.String ABOUT_SCHEME
        "about:".
        See Also:
        Constant Field Values
      • ABOUT_BLANK

        public static final java.lang.String ABOUT_BLANK
        "about:blank".
        See Also:
        Constant Field Values
      • URL_ABOUT_BLANK

        public static final java.net.URL URL_ABOUT_BLANK
        URL for "about:blank".
    • Method Detail

      • toUrlSafe

        public static java.net.URL toUrlSafe​(java.lang.String url)

        Constructs a URL instance based on the specified URL string, taking into account the fact that the specified URL string may represent an "about:..." URL, a "javascript:..." URL, or a data:... URL.

        The caller should be sure that URL strings passed to this method will parse correctly as URLs, as this method never expects to have to handle MalformedURLExceptions.

        Parameters:
        url - the URL string to convert into a URL instance
        Returns:
        the constructed URL instance
      • toUrlUnsafe

        public static java.net.URL toUrlUnsafe​(java.lang.String url)
                                        throws java.net.MalformedURLException

        Constructs a URL instance based on the specified URL string, taking into account the fact that the specified URL string may represent an "about:..." URL, a "javascript:..." URL, or a data:... URL.

        Unlike toUrlSafe(String), the caller need not be sure that URL strings passed to this method will parse correctly as URLs.

        Parameters:
        url - the URL string to convert into a URL instance
        Returns:
        the constructed URL instance
        Throws:
        java.net.MalformedURLException - if the URL string cannot be converted to a URL instance
      • encodeUrl

        public static java.net.URL encodeUrl​(java.net.URL url,
                                             boolean minimalQueryEncoding,
                                             java.nio.charset.Charset charset)

        Encodes illegal characters in the specified URL's path, query string and anchor according to the URL encoding rules observed in real browsers.

        For example, this method changes "http://first/?a=b c" to "http://first/?a=b%20c".

        Parameters:
        url - the URL to encode
        minimalQueryEncoding - whether or not to perform minimal query encoding, like IE does
        charset - the charset
        Returns:
        the encoded URL
      • encodeAnchor

        public static java.lang.String encodeAnchor​(java.lang.String anchor)
        Encodes and escapes the specified URI anchor string.
        Parameters:
        anchor - the anchor string to encode and escape
        Returns:
        the encoded and escaped anchor string
      • encodeHash

        public static java.lang.String encodeHash​(java.lang.String hash)
        Encodes and escapes the specified URI hash string.
        Parameters:
        hash - the anchor string to encode and escape
        Returns:
        the encoded and escaped hash string
      • encodeQuery

        public static java.lang.String encodeQuery​(java.lang.String query)
        Encodes and escapes the specified URI hash string.
        Parameters:
        query - the query string to encode and escape
        Returns:
        the encoded and escaped hash string
      • decode

        public static java.lang.String decode​(java.lang.String escaped)
        Unescapes and decodes the specified string.
        Parameters:
        escaped - the string to be unescaped and decoded
        Returns:
        the unescaped and decoded string
      • getUrlWithoutPathRefQuery

        public static java.net.URL getUrlWithoutPathRefQuery​(java.net.URL u)
                                                      throws java.net.MalformedURLException
        Creates and returns a new URL using only the protocol and authority from the given one.
        Parameters:
        u - the URL on which to base the returned URL
        Returns:
        a new URL using only the protocol and authority from the given one
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithoutRef

        public static java.net.URL getUrlWithoutRef​(java.net.URL u)
                                             throws java.net.MalformedURLException
        Creates and returns a new URL using only the protocol, authority and path from the given one.
        Parameters:
        u - the URL on which to base the returned URL
        Returns:
        a new URL using only the protocol and authority from the given one
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewProtocol

        public static java.net.URL getUrlWithNewProtocol​(java.net.URL u,
                                                         java.lang.String newProtocol)
                                                  throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, except using the specified protocol.
        Parameters:
        u - the URL on which to base the returned URL
        newProtocol - the new protocol to use in the returned URL
        Returns:
        a new URL identical to the specified URL, except using the specified protocol
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewHost

        public static java.net.URL getUrlWithNewHost​(java.net.URL u,
                                                     java.lang.String newHost)
                                              throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, except using the specified host.
        Parameters:
        u - the URL on which to base the returned URL
        newHost - the new host to use in the returned URL
        Returns:
        a new URL identical to the specified URL, except using the specified host
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewHostAndPort

        public static java.net.URL getUrlWithNewHostAndPort​(java.net.URL u,
                                                            java.lang.String newHost,
                                                            int newPort)
                                                     throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, except using the specified host.
        Parameters:
        u - the URL on which to base the returned URL
        newHost - the new host to use in the returned URL
        newPort - the new port to use in the returned URL
        Returns:
        a new URL identical to the specified URL, except using the specified host
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewPort

        public static java.net.URL getUrlWithNewPort​(java.net.URL u,
                                                     int newPort)
                                              throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, except using the specified port.
        Parameters:
        u - the URL on which to base the returned URL
        newPort - the new port to use in the returned URL or -1 to remove it
        Returns:
        a new URL identical to the specified URL, except using the specified port
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewPath

        public static java.net.URL getUrlWithNewPath​(java.net.URL u,
                                                     java.lang.String newPath)
                                              throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, except using the specified path.
        Parameters:
        u - the URL on which to base the returned URL
        newPath - the new path to use in the returned URL
        Returns:
        a new URL identical to the specified URL, except using the specified path
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewRef

        public static java.net.URL getUrlWithNewRef​(java.net.URL u,
                                                    java.lang.String newRef)
                                             throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, except using the specified reference.
        Parameters:
        u - the URL on which to base the returned URL
        newRef - the new reference to use in the returned URL or null to remove it
        Returns:
        a new URL identical to the specified URL, except using the specified reference
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewQuery

        public static java.net.URL getUrlWithNewQuery​(java.net.URL u,
                                                      java.lang.String newQuery)
                                               throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, except using the specified query string.
        Parameters:
        u - the URL on which to base the returned URL
        newQuery - the new query string to use in the returned URL
        Returns:
        a new URL identical to the specified URL, except using the specified query string
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithProtocolAndAuthority

        public static java.net.URL getUrlWithProtocolAndAuthority​(java.net.URL u)
                                                           throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL, ignoring path, protocol and query.
        Parameters:
        u - the URL on which to base the returned URL
        Returns:
        a new URL identical to the specified URL, ignoring path, protocol and query
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewUserName

        public static java.net.URL getUrlWithNewUserName​(java.net.URL u,
                                                         java.lang.String newUserName)
                                                  throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL but with a changed user name.
        Parameters:
        u - the URL on which to base the returned URL
        newUserName - the new user name or null to remove it
        Returns:
        a new URL identical to the specified URL; only user name updated
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • getUrlWithNewUserPassword

        public static java.net.URL getUrlWithNewUserPassword​(java.net.URL u,
                                                             java.lang.String newUserPassword)
                                                      throws java.net.MalformedURLException
        Creates and returns a new URL identical to the specified URL but with a changed user password.
        Parameters:
        u - the URL on which to base the returned URL
        newUserPassword - the new user password or null to remove it
        Returns:
        a new URL identical to the specified URL; only user name updated
        Throws:
        java.net.MalformedURLException - if there is a problem creating the new URL
      • resolveUrl

        public static java.lang.String resolveUrl​(java.lang.String baseUrl,
                                                  java.lang.String relativeUrl)
        Resolves a given relative URL against a base URL. See RFC1808 Section 4 for more details.
        Parameters:
        baseUrl - The base URL in which to resolve the specification.
        relativeUrl - The relative URL to resolve against the base URL.
        Returns:
        the resolved specification.
      • resolveUrl

        public static java.lang.String resolveUrl​(java.net.URL baseUrl,
                                                  java.lang.String relativeUrl)
        Resolves a given relative URL against a base URL. See RFC1808 Section 4 for more details.
        Parameters:
        baseUrl - The base URL in which to resolve the specification.
        relativeUrl - The relative URL to resolve against the base URL.
        Returns:
        the resolved specification.
      • isValidScheme

        public static boolean isValidScheme​(java.lang.String scheme)
        Returns true if specified string is a valid scheme name.

        https://tools.ietf.org/html/rfc1738

        Scheme names consist of a sequence of characters. The lower case letters "a"--"z", digits, and the characters plus ("+"), period ("."), and hyphen ("-") are allowed. For resiliency, programs interpreting URLs should treat upper case letters as equivalent to lower case in scheme names (e.g., allow "HTTP" as well as "http").

        Parameters:
        scheme - the scheme string to check
        Returns:
        true if valid
      • isSpecialScheme

        public static boolean isSpecialScheme​(java.lang.String scheme)
        Returns true if specified string is a special scheme.

        https://url.spec.whatwg.org/#special-scheme

        Parameters:
        scheme - the scheme string to check
        Returns:
        true if special
      • sameFile

        public static boolean sameFile​(java.net.URL u1,
                                       java.net.URL u2)
        More or less the same as sameFile(URL, URL) but without resolving the host to an IP address for comparing. Additionally we do some path normalization.
        Parameters:
        u1 - a URL object
        u2 - a URL object
        Returns:
        true if u1 and u2 refer to the same file
      • normalize

        public static java.lang.String normalize​(java.net.URL url)
        Helper that constructs a normalized url string usable as cache key.
        Parameters:
        url - a URL object
        Returns:
        the normalized string
      • toURI

        public static java.net.URI toURI​(java.net.URL url,
                                         java.lang.String query)
                                  throws java.net.URISyntaxException
        Constructs a URI using the specified URL.
        Parameters:
        url - the URL
        query - the query
        Returns:
        the URI
        Throws:
        java.net.URISyntaxException - If both a scheme and a path are given but the path is relative, if the URI string constructed from the given components violates RFC 2396, or if the authority component of the string is present but cannot be parsed as a server-based authority
      • encodeQueryPart

        public static java.lang.String encodeQueryPart​(java.lang.String part)
        Parameters:
        part - the part to encode
        Returns:
        the ecoded string
      • removeRedundantPort

        public static java.net.URL removeRedundantPort​(java.net.URL url)
                                                throws java.net.MalformedURLException
        Removes the well known ports if it can be deduced from protocol.
        Parameters:
        url - the url to clean up
        Returns:
        a new URL without the port or the given one
        Throws:
        java.net.MalformedURLException - if the URL string cannot be converted to a URL instance