Class Url

  • All Implemented Interfaces:
    Serializable

    public class Url
    extends Object
    implements Serializable
    Represents the URL to an external resource or internal resource/component.

    A url could be:

    • full - consists of an optional protocol/scheme, a host name, an optional port, optional segments and and optional query parameters.
    • non-full:
      • absolute - a url relative to the host name. Such url may escape from the application by using different context path and/or different filter path. For example: /foo/bar
      • relative - a url relative to the current base url. The base url is the url of the currently rendered page. For example: foo/bar, ../foo/bar

    Example URLs:
    • http://hostname:1234/foo/bar?a=b#baz - protocol: http, host: hostname, port: 1234, segments: ["foo","bar"], fragment: baz
    • http://hostname:1234/foo/bar?a=b - protocol: http, host: hostname, port: 1234, segments: ["foo","bar"]
    • //hostname:1234/foo/bar?a=b - protocol: null, host: hostname, port: 1234, segments: ["foo","bar"]
    • foo/bar/baz?a=1&b=5 - segments: ["foo","bar","baz"], query parameters: ["a"="1", "b"="5"]
    • foo/bar//baz?=4&6 - segments: ["foo", "bar", "", "baz"], query parameters: [""="4", "6"=""]
    • /foo/bar/ - segments: ["", "foo", "bar", ""]
    • foo/bar// - segments: ["foo", "bar", "", ""]
    • ?a=b - segments: [ ], query parameters: ["a"="b"]
    The Url class takes care of encoding and decoding of the segments and parameters.
    Author:
    Matej Knopp, Igor Vaynberg
    See Also:
    Serialized Form
    • Method Detail

      • parse

        public static Url parse​(CharSequence url)
        Parses the given URL string.
        Parameters:
        url - absolute or relative url with query string
        Returns:
        Url object
      • parse

        public static Url parse​(CharSequence _url,
                                Charset charset)
        Parses the given URL string.
        Parameters:
        _url - absolute or relative url with query string
        charset -
        Returns:
        Url object
      • parse

        public static Url parse​(CharSequence _url,
                                Charset charset,
                                boolean isFullHint)
        Parses the given URL string.
        Parameters:
        _url - absolute or relative url with query string
        charset -
        isFullHint - a hint whether to try to parse the protocol, host and port part of the url
        Returns:
        Url object
      • getSegments

        public List<StringgetSegments()
        Returns segments of the URL. Segments form the part before query string.
        Returns:
        mutable list of segments
      • isContextAbsolute

        public boolean isContextAbsolute()
        Returns whether the Url is context absolute. Absolute Urls start with a '/'.
        Returns:
        true if Url starts with the context path, false otherwise.
      • isDataUrl

        public boolean isDataUrl()
        Returns whether the Url is a CSS data uri. Data uris start with 'data:'.
        Returns:
        true if Url starts with 'data:', false otherwise.
      • isFull

        public boolean isFull()
        Returns whether the Url has a host attribute. The scheme is optional because the url may be //host/path. The port is also optional because there are defaults for the different protocols.
        Returns:
        true if Url has a host attribute, false otherwise.
      • removeQueryParameters

        public void removeQueryParameters​(String name)
        Convenience method that removes all query parameters with given name.
        Parameters:
        name - query parameter name
      • removeLeadingSegments

        public void removeLeadingSegments​(int count)
        Convenience method that removes count leading segments
        Parameters:
        count -
      • prependLeadingSegments

        public void prependLeadingSegments​(List<String> newSegments)
        Convenience method that prepends segments to the segments collection
        Parameters:
        newSegments -
      • setQueryParameter

        public void setQueryParameter​(String name,
                                      Object value)
        Convenience method that removes all query parameters with given name and adds new query parameter with specified name and value
        Parameters:
        name -
        value -
      • addQueryParameter

        public void addQueryParameter​(String name,
                                      Object value)
        Convenience method that removes adds a query parameter with given name
        Parameters:
        name -
        value -
      • getQueryParameter

        public Url.QueryParameter getQueryParameter​(String name)
        Returns first query parameter with specified name or null if such query parameter doesn't exist.
        Parameters:
        name -
        Returns:
        query parameter or null
      • concatSegments

        public void concatSegments​(List<String> segments)
        Concatenate the specified segments; The segments can be relative - begin with "." or "..".
        Parameters:
        segments -
      • resolveRelative

        public void resolveRelative​(Url relative)
        Makes this url the result of resolving the relative url against this url.

        Segments will be properly resolved, handling any .. references, while the query parameters will be completely replaced with relative's query parameters.

        For example:

         wicket/page/render?foo=bar
         
        resolved with
         ../component/render?a=b
         
        will become
         wicket/component/render?a=b
         

        Parameters:
        relative - relative url
      • getProtocol

        public String getProtocol()
        Gets the protocol of this url (http/https/etc)
        Returns:
        protocol or null if none has been set
      • setProtocol

        public void setProtocol​(String protocol)
        Sets the protocol of this url (http/https/etc)
        Parameters:
        protocol -
      • setContextRelative

        public void setContextRelative​(boolean contextRelative)
        Flags the URL as relative to the application context.
        Parameters:
        contextRelative -
      • isContextRelative

        public boolean isContextRelative()
        Tests if the URL is relative to the application context. If so, it holds all the information an absolute URL would have, minus the context and filter mapping segments
        Returns:
        contextRelative
      • getPort

        public Integer getPort()
        Gets the port of this url
        Returns:
        port or null if none has been set
      • setPort

        public void setPort​(Integer port)
        Sets the port of this url
        Parameters:
        port -
      • getHost

        public String getHost()
        Gets the host name of this url
        Returns:
        host name or null if none is seto
      • setHost

        public void setHost​(String host)
        Sets the host name of this url
        Parameters:
        host -
      • getPath

        public String getPath​(Charset charset)
        return path for current url in given encoding
        Parameters:
        charset - character set for encoding
        Returns:
        path string
      • getPath

        public String getPath()
        return path for current url in original encoding
        Returns:
        path string
      • getQueryString

        public String getQueryString​(Charset charset)
        return query string part of url in given encoding
        Parameters:
        charset - character set for encoding
        Returns:
        query string (null if empty)
        Since:
        Wicket 7 the return value does not contain any "?" and could be null
      • getQueryString

        public String getQueryString()
        return query string part of url in original encoding
        Returns:
        query string (null if empty)
        Since:
        Wicket 7 the return value does not contain any "?" and could be null
      • canonical

        public Url canonical()
        Try to reduce url by eliminating '..' and '.' from the path where appropriate (this is somehow similar to File.getCanonicalPath()). Either by different / unexpected browser behavior or by malicious attacks it can happen that these kind of redundant urls are processed by wicket. These urls can cause some trouble when mapping the request.

        example: the url

         /example/..;jsessionid=234792?0
         
        will not get normalized by the browser due to the ';jsessionid' string that gets appended by the servlet container. After wicket strips the jsessionid part the resulting internal url will be
         /example/..
         
        instead of
         /
         

        This code correlates to WICKET-4303

        Returns:
        canonical url