Save This Page
Home » commons-httpclient-3.1-src » org.apache.commons » httpclient » [javadoc | source]
org.apache.commons.httpclient
public class: URI [javadoc | source]
java.lang.Object
   org.apache.commons.httpclient.URI

All Implemented Interfaces:
    Cloneable, Serializable, Comparable

Direct Known Subclasses:
    Coder, HttpsURL, HttpURL

The interface for the URI(Uniform Resource Identifiers) version of RFC 2396. This class has the purpose of supportting of parsing a URI reference to extend any specific protocols, the character encoding of the protocol to be transported and the charset of the document.

A URI is always in an "escaped" form, since escaping or unescaping a completed URI might change its semantics.

Implementers should be careful not to escape or unescape the same string more than once, since unescaping an already unescaped string might lead to misinterpreting a percent data character as another escaped character, or vice versa in the case of escaping an already escaped string.

In order to avoid these problems, data types used as follows:

URI character sequence: char
octet sequence: byte
original character sequence: String

So, a URI is a sequence of characters as an array of a char type, which is not always represented as a sequence of octets as an array of byte.

URI Syntactic Components

- In general, written as follows:
Absolute URI = <scheme>:<scheme-specific-part>
Generic URI = <scheme>://<authority><path>?<query>

- Syntax
absoluteURI = scheme ":" ( hier_part | opaque_part )
hier_part = ( net_path | abs_path ) [ "?" query ]
net_path = "//" authority [ abs_path ]
abs_path = "/" path_segments

The following examples illustrate URI that are in common use.

ftp://ftp.is.co.za/rfc/rfc1808.txt
-- ftp scheme for File Transfer Protocol services
gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles
-- gopher scheme for Gopher and Gopher+ Protocol services
http://www.math.uio.no/faq/compression-faq/part1.html
-- http scheme for Hypertext Transfer Protocol services
mailto:mduerst@ifi.unizh.ch
-- mailto scheme for electronic mail addresses
news:comp.infosystems.www.servers.unix
-- news scheme for USENET news groups and articles
telnet://melvyl.ucop.edu/
-- telnet scheme for interactive services via the TELNET Protocol
Please, notice that there are many modifications from URL(RFC 1738) and relative URL(RFC 1808).

The expressions for a URI

For escaped URI forms
- URI(char[]) // constructor
- char[] getRawXxx() // method
- String getEscapedXxx() // method
- String toString() // method

For unescaped URI forms - URI(String) // constructor - String getXXX() // method

Nested Class Summary:
public static class  URI.DefaultCharsetChanged  The charset-changed normal operation to represent to be required to alert to user the fact the default charset is changed. 
public static class  URI.LocaleToCharsetMap  A mapping to determine the (somewhat arbitrarily) preferred charset for a given locale. Supports all locales recognized in JDK 1.1.

The distribution of this class is Servlets.com. It was originally written by Jason Hunter [jhunter at acm.org] and used by with permission. 

Field Summary
static final  long serialVersionUID    Version ID for serialization 
protected  int hash    Cache the hash code for this URI. 
protected  char[] _uri    This Uniform Resource Identifier (URI). The URI is always in an "escaped" form, since escaping or unescaping a completed URI might change its semantics. 
protected  String protocolCharset    The charset of the protocol used by this URI instance. 
protected static  String defaultProtocolCharset    The default charset of the protocol. RFC 2277, 2396 
protected static  String defaultDocumentCharset    The default charset of the document. RFC 2277, 2396 The platform's charset is used for the document by default. 
protected static  String defaultDocumentCharsetByLocale     
protected static  String defaultDocumentCharsetByPlatform     
protected  char[] _scheme    The scheme. 
protected  char[] _opaque    The opaque. 
protected  char[] _authority    The authority. 
protected  char[] _userinfo    The userinfo. 
protected  char[] _host    The host. 
protected  int _port    The port. 
protected  char[] _path    The path. 
protected  char[] _query    The query. 
protected  char[] _fragment    The fragment. 
protected static final  char[] rootPath    The root path. 
protected static final  BitSet percent    The percent "%" character always has the reserved purpose of being the escape indicator, it must be escaped as "%25" in order to be used as data within a URI. 
protected static final  BitSet digit    BitSet for digit.

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
"8" | "9"

 

protected static final  BitSet alpha    BitSet for alpha.

alpha = lowalpha | upalpha

 

protected static final  BitSet alphanum    BitSet for alphanum (join of alpha & digit).

alphanum = alpha | digit

 

protected static final  BitSet hex    BitSet for hex.

hex = digit | "A" | "B" | "C" | "D" | "E" | "F" |
"a" | "b" | "c" | "d" | "e" | "f"

 

protected static final  BitSet escaped    BitSet for escaped.

escaped = "%" hex hex

 

protected static final  BitSet mark    BitSet for mark.

mark = "-" | "_" | "." | "!" | "~" | "*" | "'" |
"(" | ")"

 

protected static final  BitSet unreserved    Data characters that are allowed in a URI but do not have a reserved purpose are called unreserved.

unreserved = alphanum | mark

 

protected static final  BitSet reserved    BitSet for reserved.

reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
"$" | ","

 

protected static final  BitSet uric    BitSet for uric.

uric = reserved | unreserved | escaped

 

protected static final  BitSet fragment    BitSet for fragment (alias for uric).

fragment = *uric

 

protected static final  BitSet query    BitSet for query (alias for uric).

query = *uric

 

protected static final  BitSet pchar    BitSet for pchar.

pchar = unreserved | escaped |
":" | "@" | "&" | "=" | "+" | "$" | ","

 

protected static final  BitSet param    BitSet for param (alias for pchar).

param = *pchar

 

protected static final  BitSet segment    BitSet for segment.

segment = *pchar *( ";" param )

 

protected static final  BitSet path_segments    BitSet for path segments.

path_segments = segment *( "/" segment )

 

protected static final  BitSet abs_path    URI absolute path.

abs_path = "/" path_segments

 

protected static final  BitSet uric_no_slash    URI bitset for encoding typical non-slash characters.

uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
"&" | "=" | "+" | "$" | ","

 

protected static final  BitSet opaque_part    URI bitset that combines uric_no_slash and uric.

opaque_part = uric_no_slash *uric

 

protected static final  BitSet path    URI bitset that combines absolute path and opaque part.

path = [ abs_path | opaque_part ]

 

protected static final  BitSet port    Port, a logical alias for digit. 
protected static final  BitSet IPv4address    Bitset that combines digit and dot fo IPv$address.

IPv4address = 1*digit "." 1*digit "." 1*digit "." 1*digit

 

protected static final  BitSet IPv6address    RFC 2373.

IPv6address = hexpart [ ":" IPv4address ]

 

protected static final  BitSet IPv6reference    RFC 2732, 2373.

IPv6reference = "[" IPv6address "]"

 

protected static final  BitSet toplabel    BitSet for toplabel.

toplabel = alpha | alpha *( alphanum | "-" ) alphanum

 

protected static final  BitSet domainlabel    BitSet for domainlabel.

domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum

 

protected static final  BitSet hostname    BitSet for hostname.

hostname = *( domainlabel "." ) toplabel [ "." ]

 

protected static final  BitSet host    BitSet for host.

host = hostname | IPv4address | IPv6reference

 

protected static final  BitSet hostport    BitSet for hostport.

hostport = host [ ":" port ]

 

protected static final  BitSet userinfo    Bitset for userinfo.

userinfo = *( unreserved | escaped |
";" | ":" | "&" | "=" | "+" | "$" | "," )

 

public static final  BitSet within_userinfo    BitSet for within the userinfo component like user and password. 
protected static final  BitSet server    Bitset for server.

server = [ [ userinfo "@" ] hostport ]

 

protected static final  BitSet reg_name    BitSet for reg_name.

reg_name = 1*( unreserved | escaped | "$" | "," |
";" | ":" | "@" | "&" | "=" | "+" )

 

protected static final  BitSet authority    BitSet for authority.

authority = server | reg_name

 

protected static final  BitSet scheme    BitSet for scheme.

scheme = alpha *( alpha | digit | "+" | "-" | "." )

 

protected static final  BitSet rel_segment    BitSet for rel_segment.

rel_segment = 1*( unreserved | escaped |
";" | "@" | "&" | "=" | "+" | "$" | "," )

 

protected static final  BitSet rel_path    BitSet for rel_path.

rel_path = rel_segment [ abs_path ]

 

protected static final  BitSet net_path    BitSet for net_path.

net_path = "//" authority [ abs_path ]

 

protected static final  BitSet hier_part    BitSet for hier_part.

hier_part = ( net_path | abs_path ) [ "?" query ]

 

protected static final  BitSet relativeURI    BitSet for relativeURI.

relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]

 

protected static final  BitSet absoluteURI    BitSet for absoluteURI.

absoluteURI = scheme ":" ( hier_part | opaque_part )

 

protected static final  BitSet URI_reference    BitSet for URI-reference.

URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

 

public static final  BitSet control    BitSet for control. 
public static final  BitSet space    BitSet for space. 
public static final  BitSet delims    BitSet for delims. 
public static final  BitSet unwise    BitSet for unwise. 
public static final  BitSet disallowed_rel_path    Disallowed rel_path before escaping. 
public static final  BitSet disallowed_opaque_part    Disallowed opaque_part before escaping. 
public static final  BitSet allowed_authority    Those characters that are allowed for the authority component. 
public static final  BitSet allowed_opaque_part    Those characters that are allowed for the opaque_part. 
public static final  BitSet allowed_reg_name    Those characters that are allowed for the reg_name. 
public static final  BitSet allowed_userinfo    Those characters that are allowed for the userinfo component. 
public static final  BitSet allowed_within_userinfo    Those characters that are allowed for within the userinfo component. 
public static final  BitSet allowed_IPv6reference    Those characters that are allowed for the IPv6reference component. The characters '[', ']' in IPv6reference should be excluded. 
public static final  BitSet allowed_host    Those characters that are allowed for the host component. The characters '[', ']' in IPv6reference should be excluded. 
public static final  BitSet allowed_within_authority    Those characters that are allowed for the authority component. 
public static final  BitSet allowed_abs_path    Those characters that are allowed for the abs_path. 
public static final  BitSet allowed_rel_path    Those characters that are allowed for the rel_path. 
public static final  BitSet allowed_within_path    Those characters that are allowed within the path. 
public static final  BitSet allowed_query    Those characters that are allowed for the query component. 
public static final  BitSet allowed_within_query    Those characters that are allowed within the query component. 
public static final  BitSet allowed_fragment    Those characters that are allowed for the fragment component. 
protected  boolean _is_hier_part     
protected  boolean _is_opaque_part     
protected  boolean _is_net_path     
protected  boolean _is_abs_path     
protected  boolean _is_rel_path     
protected  boolean _is_reg_name     
protected  boolean _is_server     
protected  boolean _is_hostname     
protected  boolean _is_IPv4address     
protected  boolean _is_IPv6reference     
Constructor:
 protected URI() 
 public URI(char[] escaped) throws URIException, NullPointerException 
    Construct a URI as an escaped form of a character array. An URI can be placed within double-quotes or angle brackets like "http://test.com/" and <http://test.com/>
    Parameters:
    escaped - the URI character sequence
    Throws:
    URIException - If the URI cannot be created.
    NullPointerException - if escaped is null
    Also see:
    getDefaultProtocolCharset
 public URI(String original) throws URIException 
    Construct a URI from the given string.

    URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
    

    An URI can be placed within double-quotes or angle brackets like "http://test.com/" and <http://test.com/>

    Parameters:
    original - the string to be represented to URI character sequence It is one of absoluteURI and relativeURI.
    Throws:
    URIException - If the URI cannot be created.
    Also see:
    getDefaultProtocolCharset
 public URI(String s,
    boolean escaped) throws URIException, NullPointerException 
    Construct a URI from a string with the given charset. The input string can be either in escaped or unescaped form.
    Parameters:
    s - URI character sequence
    escaped - true if URI character sequence is in escaped form. false otherwise.
    Throws:
    URIException - If the URI cannot be created.
    NullPointerException - if input string is null
    Also see:
    getProtocolCharset
    since: 3.0 -
 public URI(char[] escaped,
    String charset) throws URIException, NullPointerException 
    Construct a URI as an escaped form of a character array with the given charset.
    Parameters:
    escaped - the URI character sequence
    charset - the charset string to do escape encoding
    Throws:
    URIException - If the URI cannot be created.
    NullPointerException - if escaped is null
    Also see:
    getProtocolCharset
 public URI(String original,
    String charset) throws URIException 
    Construct a URI from the given string with the given charset.
    Parameters:
    original - the string to be represented to URI character sequence It is one of absoluteURI and relativeURI.
    charset - the charset string to do escape encoding
    Throws:
    URIException - If the URI cannot be created.
    Also see:
    getProtocolCharset
 public URI(URI base,
    String relative) throws URIException 
    Construct a general URI with the given relative URI string.
    Parameters:
    base - the base URI
    relative - the relative URI string
    Throws:
    URIException - If the new URI cannot be created.
 public URI(URI base,
    URI relative) throws URIException 
    Construct a general URI with the given relative URI.

    URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
    relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
    

    Resolving Relative References to Absolute Form. Examples of Resolving Relative URI References Within an object with a well-defined base URI of

    http://a/b/c/d;p?q
    

    the relative URI would be resolved as follows: Normal Examples

    g:h = g:h
    g = http://a/b/c/g
    ./g = http://a/b/c/g
    g/ = http://a/b/c/g/
    /g = http://a/g
    //g = http://g
    ?y = http://a/b/c/?y
    g?y = http://a/b/c/g?y
    #s = (current document)#s
    g#s = http://a/b/c/g#s
    g?y#s = http://a/b/c/g?y#s
    ;x = http://a/b/c/;x
    g;x = http://a/b/c/g;x
    g;x?y#s = http://a/b/c/g;x?y#s
    . = http://a/b/c/
    ./ = http://a/b/c/
    .. = http://a/b/
    ../ = http://a/b/
    ../g = http://a/b/g
    ../.. = http://a/
    ../../ = http://a/
    ../../g = http://a/g
    

    Some URI schemes do not allow a hierarchical syntax matching the syntax, and thus cannot use relative references.

    Parameters:
    base - the base URI
    relative - the relative URI
    Throws:
    URIException - If the new URI cannot be created.
 public URI(String s,
    boolean escaped,
    String charset) throws URIException, NullPointerException 
    Construct a URI from a string with the given charset. The input string can be either in escaped or unescaped form.
    Parameters:
    s - URI character sequence
    escaped - true if URI character sequence is in escaped form. false otherwise.
    charset - the charset string to do escape encoding, if required
    Throws:
    URIException - If the URI cannot be created.
    NullPointerException - if input string is null
    Also see:
    getProtocolCharset
    since: 3.0 -
 public URI(String scheme,
    String schemeSpecificPart,
    String fragment) throws URIException 
    Construct a general URI from the given components.

    URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
    absoluteURI = scheme ":" ( hier_part | opaque_part )
    opaque_part = uric_no_slash *uric
    

    It's for absolute URI = <scheme>:<scheme-specific-part># <fragment>.

    Parameters:
    scheme - the scheme string
    schemeSpecificPart - scheme_specific_part
    fragment - the fragment string
    Throws:
    URIException - If the URI cannot be created.
    Also see:
    getDefaultProtocolCharset
 public URI(URI base,
    String relative,
    boolean escaped) throws URIException 
    Construct a general URI with the given relative URI string.
    Parameters:
    base - the base URI
    relative - the relative URI string
    escaped - true if URI character sequence is in escaped form. false otherwise.
    Throws:
    URIException - If the new URI cannot be created.
    since: 3.0 -
 public URI(String scheme,
    String userinfo,
    String host,
    int port) throws URIException 
    Construct a general URI from the given components.
    Parameters:
    scheme - the scheme string
    userinfo - the userinfo string
    host - the host string
    port - the port number
    Throws:
    URIException - If the new URI cannot be created.
    Also see:
    getDefaultProtocolCharset
 public URI(String scheme,
    String host,
    String path,
    String fragment) throws URIException 
    Construct a general URI from the given components.
    Parameters:
    scheme - the scheme string
    host - the host string
    path - the path string
    fragment - the fragment string
    Throws:
    URIException - If the new URI cannot be created.
    Also see:
    getDefaultProtocolCharset
 public URI(String scheme,
    String authority,
    String path,
    String query,
    String fragment) throws URIException 
    Construct a general URI from the given components.

    URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
    absoluteURI = scheme ":" ( hier_part | opaque_part )
    relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
    hier_part = ( net_path | abs_path ) [ "?" query ]
    

    It's for absolute URI = <scheme>:<path>?<query>#< fragment> and relative URI = <path>?<query>#<fragment >.

    Parameters:
    scheme - the scheme string
    authority - the authority string
    path - the path string
    query - the query string
    fragment - the fragment string
    Throws:
    URIException - If the new URI cannot be created.
    Also see:
    getDefaultProtocolCharset
 public URI(String scheme,
    String userinfo,
    String host,
    int port,
    String path) throws URIException 
    Construct a general URI from the given components.
    Parameters:
    scheme - the scheme string
    userinfo - the userinfo string
    host - the host string
    port - the port number
    path - the path string
    Throws:
    URIException - If the new URI cannot be created.
    Also see:
    getDefaultProtocolCharset
 public URI(String scheme,
    String userinfo,
    String host,
    int port,
    String path,
    String query) throws URIException 
    Construct a general URI from the given components.
    Parameters:
    scheme - the scheme string
    userinfo - the userinfo string
    host - the host string
    port - the port number
    path - the path string
    query - the query string
    Throws:
    URIException - If the new URI cannot be created.
    Also see:
    getDefaultProtocolCharset
 public URI(String scheme,
    String userinfo,
    String host,
    int port,
    String path,
    String query,
    String fragment) throws URIException 
    Construct a general URI from the given components.
    Parameters:
    scheme - the scheme string
    userinfo - the userinfo string
    host - the host string
    port - the port number
    path - the path string
    query - the query string
    fragment - the fragment string
    Throws:
    URIException - If the new URI cannot be created.
    Also see:
    getDefaultProtocolCharset
Method from org.apache.commons.httpclient.URI Summary:
clone,   compareTo,   decode,   decode,   encode,   equals,   equals,   getAboveHierPath,   getAuthority,   getCurrentHierPath,   getDefaultDocumentCharset,   getDefaultDocumentCharsetByLocale,   getDefaultDocumentCharsetByPlatform,   getDefaultProtocolCharset,   getEscapedAboveHierPath,   getEscapedAuthority,   getEscapedCurrentHierPath,   getEscapedFragment,   getEscapedName,   getEscapedPath,   getEscapedPathQuery,   getEscapedQuery,   getEscapedURI,   getEscapedURIReference,   getEscapedUserinfo,   getFragment,   getHost,   getName,   getPath,   getPathQuery,   getPort,   getProtocolCharset,   getQuery,   getRawAboveHierPath,   getRawAuthority,   getRawCurrentHierPath,   getRawCurrentHierPath,   getRawFragment,   getRawHost,   getRawName,   getRawPath,   getRawPathQuery,   getRawQuery,   getRawScheme,   getRawURI,   getRawURIReference,   getRawUserinfo,   getScheme,   getURI,   getURIReference,   getUserinfo,   hasAuthority,   hasFragment,   hasQuery,   hasUserinfo,   hashCode,   indexFirstOf,   indexFirstOf,   indexFirstOf,   indexFirstOf,   isAbsPath,   isAbsoluteURI,   isHierPart,   isHostname,   isIPv4address,   isIPv6reference,   isNetPath,   isOpaquePart,   isRegName,   isRelPath,   isRelativeURI,   isServer,   normalize,   normalize,   parseAuthority,   parseUriReference,   prevalidate,   removeFragmentIdentifier,   resolvePath,   setDefaultDocumentCharset,   setDefaultProtocolCharset,   setEscapedAuthority,   setEscapedFragment,   setEscapedPath,   setEscapedQuery,   setFragment,   setPath,   setQuery,   setRawAuthority,   setRawFragment,   setRawPath,   setRawQuery,   setURI,   toString,   validate,   validate
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.apache.commons.httpclient.URI Detail:
 public synchronized Object clone() throws CloneNotSupportedException 
    Create and return a copy of this object, the URI-reference containing the userinfo component. Notice that the whole URI-reference including the userinfo component counld not be gotten as a String.

    To copy the identical URI object including the userinfo component, it should be used.

 public int compareTo(Object obj) throws ClassCastException 
    Compare this URI to another object.
 protected static String decode(char[] component,
    String charset) throws URIException 
    Decodes URI encoded string. This is a two mapping, one from URI characters to octets, and subsequently a second from octets to original characters:

    URI character sequence->octet sequence->original character sequence
    

    A URI must be separated into its components before the escaped characters within those components can be allowedly decoded.

    Notice that there is a chance that URI characters that are non UTF-8 may be parsed as valid UTF-8. A recent non-scientific analysis found that EUC encoded Japanese words had a 2.7% false reading; SJIS had a 0.0005% false reading; other encoding such as ASCII or KOI-8 have a 0% false reading.

    The percent "%" character always has the reserved purpose of being the escape indicator, it must be escaped as "%25" in order to be used as data within a URI.

    The unescape method is internally performed within this method.

 protected static String decode(String component,
    String charset) throws URIException 
    Decodes URI encoded string. This is a two mapping, one from URI characters to octets, and subsequently a second from octets to original characters:

    URI character sequence->octet sequence->original character sequence
    

    A URI must be separated into its components before the escaped characters within those components can be allowedly decoded.

    Notice that there is a chance that URI characters that are non UTF-8 may be parsed as valid UTF-8. A recent non-scientific analysis found that EUC encoded Japanese words had a 2.7% false reading; SJIS had a 0.0005% false reading; other encoding such as ASCII or KOI-8 have a 0% false reading.

    The percent "%" character always has the reserved purpose of being the escape indicator, it must be escaped as "%25" in order to be used as data within a URI.

    The unescape method is internally performed within this method.

 protected static char[] encode(String original,
    BitSet allowed,
    String charset) throws URIException 
    Encodes URI string. This is a two mapping, one from original characters to octets, and subsequently a second from octets to URI characters:

    original character sequence->octet sequence->URI character sequence
    

    An escaped octet is encoded as a character triplet, consisting of the percent character "%" followed by the two hexadecimal digits representing the octet code. For example, "%20" is the escaped encoding for the US-ASCII space character.

    Conversion from the local filesystem character set to UTF-8 will normally involve a two step process. First convert the local character set to the UCS; then convert the UCS to UTF-8. The first step in the process can be performed by maintaining a mapping table that includes the local character set code and the corresponding UCS code. The next step is to convert the UCS character code to the UTF-8 encoding.

    Mapping between vendor codepages can be done in a very similar manner as described above.

    The only time escape encodings can allowedly be made is when a URI is being created from its component parts. The escape and validate methods are internally performed within this method.

 public boolean equals(Object obj) 
    Test an object if this URI is equal to another.
 protected boolean equals(char[] first,
    char[] second) 
    Test if the first array is equal to the second array.
 public String getAboveHierPath() throws URIException 
    Get the level above the this hierarchy level.
 public String getAuthority() throws URIException 
    Get the authority.
 public String getCurrentHierPath() throws URIException 
    Get the current hierarchy level.
 public static String getDefaultDocumentCharset() 
    Get the recommended default charset of the document.
 public static String getDefaultDocumentCharsetByLocale() 
    Get the default charset of the document by locale.
 public static String getDefaultDocumentCharsetByPlatform() 
    Get the default charset of the document by platform.
 public static String getDefaultProtocolCharset() 
    Get the default charset of the protocol.

    An individual URI scheme may require a single charset, define a default charset, or provide a way to indicate the charset used.

    To work globally either requires support of a number of character sets and to be able to convert between them, or the use of a single preferred character set. For support of global compatibility it is STRONGLY RECOMMENDED that clients and servers use UTF-8 encoding when exchanging URIs.

 public String getEscapedAboveHierPath() throws URIException 
    Get the level above the this hierarchy level.
 public String getEscapedAuthority() 
    Get the escaped authority.
 public String getEscapedCurrentHierPath() throws URIException 
    Get the escaped current hierarchy level.
 public String getEscapedFragment() 
    Get the escaped fragment.
 public String getEscapedName() 
    Get the escaped basename of the path.
 public String getEscapedPath() 
    Get the escaped path.

    path = [ abs_path | opaque_part ]
    abs_path = "/" path_segments
    opaque_part = uric_no_slash *uric
    

 public String getEscapedPathQuery() 
    Get the escaped query.
 public String getEscapedQuery() 
    Get the escaped query.
 public String getEscapedURI() 
    It can be gotten the URI character sequence. It's escaped. For the purpose of the protocol to be transported, it will be useful.
 public String getEscapedURIReference() 
    Get the escaped URI reference string.
 public String getEscapedUserinfo() 
    Get the escaped userinfo.
 public String getFragment() throws URIException 
    Get the fragment.
 public String getHost() throws URIException 
    Get the host.

    host = hostname | IPv4address | IPv6reference
    

 public String getName() throws URIException 
    Get the basename of the path.
 public String getPath() throws URIException 
    Get the path.

    path = [ abs_path | opaque_part ]
    

 public String getPathQuery() throws URIException 
    Get the path and query.
 public int getPort() 
    Get the port. In order to get the specfic default port, the specific protocol-supported class extended from the URI class should be used. It has the server-based naming authority.
 public String getProtocolCharset() 
    Get the protocol charset used by this current URI instance. It was set by the constructor for this instance. If it was not set by contructor, it will return the default protocol charset.
 public String getQuery() throws URIException 
    Get the query.
 public char[] getRawAboveHierPath() throws URIException 
    Get the level above the this hierarchy level.
 public char[] getRawAuthority() 
    Get the raw-escaped authority.
 public char[] getRawCurrentHierPath() throws URIException 
    Get the raw-escaped current hierarchy level.
 protected char[] getRawCurrentHierPath(char[] path) throws URIException 
    Get the raw-escaped current hierarchy level in the given path. If the last namespace is a collection, the slash mark ('/') should be ended with at the last character of the path string.
 public char[] getRawFragment() 
    Get the raw-escaped fragment.

    The optional fragment identifier is not part of a URI, but is often used in conjunction with a URI.

    The format and interpretation of fragment identifiers is dependent on the media type [RFC2046] of the retrieval result.

    A fragment identifier is only meaningful when a URI reference is intended for retrieval and the result of that retrieval is a document for which the identified fragment is consistently defined.

 public char[] getRawHost() 
    Get the host.

    host = hostname | IPv4address | IPv6reference
    

 public char[] getRawName() 
    Get the raw-escaped basename of the path.
 public char[] getRawPath() 
    Get the raw-escaped path.

    path = [ abs_path | opaque_part ]
    

 public char[] getRawPathQuery() 
    Get the raw-escaped path and query.
 public char[] getRawQuery() 
    Get the raw-escaped query.
 public char[] getRawScheme() 
    Get the scheme.
 public char[] getRawURI() 
    It can be gotten the URI character sequence. It's raw-escaped. For the purpose of the protocol to be transported, it will be useful.

    It is clearly unwise to use a URL that contains a password which is intended to be secret. In particular, the use of a password within the 'userinfo' component of a URL is strongly disrecommended except in those rare cases where the 'password' parameter is intended to be public.

    When you want to get each part of the userinfo, you need to use the specific methods in the specific URL. It depends on the specific URL.

 public char[] getRawURIReference() 
    Get the URI reference character sequence.
 public char[] getRawUserinfo() 
    Get the raw-escaped userinfo.
 public String getScheme() 
    Get the scheme.
 public String getURI() throws URIException 
    It can be gotten the URI character sequence.
 public String getURIReference() throws URIException 
    Get the original URI reference string.
 public String getUserinfo() throws URIException 
    Get the userinfo.
 public boolean hasAuthority() 
    Tell whether or not this URI has authority. It's the same function as the is_net_path() method.
 public boolean hasFragment() 
    Tell whether or not this URI has fragment.
 public boolean hasQuery() 
    Tell whether or not this URI has query.
 public boolean hasUserinfo() 
    Tell whether or not this URI has userinfo.
 public int hashCode() 
    Return a hash code for this URI.
 protected int indexFirstOf(String s,
    String delims) 
    Get the earlier index that to be searched for the first occurrance in one of any of the given string.
 protected int indexFirstOf(char[] s,
    char delim) 
    Get the earlier index that to be searched for the first occurrance in one of any of the given array.
 protected int indexFirstOf(String s,
    String delims,
    int offset) 
    Get the earlier index that to be searched for the first occurrance in one of any of the given string.
 protected int indexFirstOf(char[] s,
    char delim,
    int offset) 
    Get the earlier index that to be searched for the first occurrance in one of any of the given array.
 public boolean isAbsPath() 
    Tell whether or not the relativeURI or hier_part of this URI is abs_path.
 public boolean isAbsoluteURI() 
    Tell whether or not this URI is absolute.
 public boolean isHierPart() 
    Tell whether or not the absoluteURI of this URI is hier_part.
 public boolean isHostname() 
    Tell whether or not the host part of this URI is hostname.
 public boolean isIPv4address() 
    Tell whether or not the host part of this URI is IPv4address.
 public boolean isIPv6reference() 
    Tell whether or not the host part of this URI is IPv6reference.
 public boolean isNetPath() 
    Tell whether or not the relativeURI or heir_part of this URI is net_path. It's the same function as the has_authority() method.
 public boolean isOpaquePart() 
    Tell whether or not the absoluteURI of this URI is opaque_part.
 public boolean isRegName() 
    Tell whether or not the authority component of this URI is reg_name.
 public boolean isRelPath() 
    Tell whether or not the relativeURI of this URI is rel_path.
 public boolean isRelativeURI() 
    Tell whether or not this URI is relative.
 public boolean isServer() 
    Tell whether or not the authority component of this URI is server.
 public  void normalize() throws URIException 
    Normalizes the path part of this URI. Normalization is only meant to be performed on URIs with an absolute path. Calling this method on a relative path URI will have no effect.
 protected char[] normalize(char[] path) throws URIException 
    Normalize the given hier path part.

    Algorithm taken from URI reference parser at http://www.apache.org/~fielding/uri/rev-2002/issues.html.

 protected  void parseAuthority(String original,
    boolean escaped) throws URIException 
    Parse the authority component.
 protected  void parseUriReference(String original,
    boolean escaped) throws URIException 
    In order to avoid any possilbity of conflict with non-ASCII characters, Parse a URI reference as a String with the character encoding of the local system or the document.

    The following line is the regular expression for breaking-down a URI reference into its components.

    ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
    12 3 4 5 6 7 8 9
    

    For example, matching the above expression to http://jakarta.apache.org/ietf/uri/#Related results in the following subexpression matches:

    $1 = http:
    scheme = $2 = http
    $3 = //jakarta.apache.org
    authority = $4 = jakarta.apache.org
    path = $5 = /ietf/uri/
    $6 = 
    query = $7 = 
    $8 = #Related
    fragment = $9 = Related
    

 protected boolean prevalidate(String component,
    BitSet disallowed) 
    Pre-validate the unescaped URI string within a specific component.
 protected char[] removeFragmentIdentifier(char[] component) 
    Remove the fragment identifier of the given component.
 protected char[] resolvePath(char[] basePath,
    char[] relPath) throws URIException