输入java uridemo1命令后,列表1的输出结果如下:
query://jeff@books.com:9000/public/manuals/appliances?stove#ge:
authority = jeff@books.com:9000
fragment = ge
host = books.com
path = /public/manuals/appliances
port = 9000
query = stove
scheme = query
//jeff@books.com:9000/public/manuals/appliances?stove
user info = jeff
uri is absolute: true
uri is opaque: false
上面的输出显示该uri是绝对的,因为它指定了一个大纲(query),并且该uri是分层的,因为query后面有/符号。
技巧
你应该调用uri的compareto(object o)和equals(object o)来决定uri的次序(为了排序目的)和等同性。你可以参考sdk文档,查阅这些方法的更多信息。
uri类支持基本的uri操作,包括标准化(normalization)、分解(resolution)和相对化(relativization)。标准化是通过uri的normalize()方法支持的。调用normalize()时,它返回对新uri对象的引用,该对象包含调用的uri对象的uri的标准的表现。
列表2演示了normalize()方法。它把uri作为程序的唯一的参数,uridemo2打印出标准的相等的uri。
列表2: uridemo2.java
// uridemo2.java
import java.net.*;
class uridemo2
{
ublic static void main (string [] args) throws exception
{
if (args.length != 1)
{
system.err.println ("usage: java uridemo2 uri");
return;
}
uri uri = new uri (args [0]);
system.out.println ("normalized uri = " +
uri.normalize ().tostring ());
}
}
在编译uridemo2后,在命令行输入java uridemo2 x/y/../z/./q,将看到下面的输出:
normalized uri = x/z/q
上面的输出显示y、..和.消失了。这是因为..意味着你想直接在x下面访问名字空间的z部分,.意味着你希望访问与z部分相关的名字空间的q部分。
uri通过提供resolve(string uri)、resolve(uri uri)和relativize(uri uri)方法支持反向解析和相对化操作。如果uri引用是空的(null)这三个方法都会产生nullpointerexception对象。同样,如果指定的uri违反了rfc 2396语法规则,resolve(string uri)通过的内部的create(string uri)调用间接地产生一个illegalargumentexception对象。
列表3的代码演示了resolve(string uri)和relativize(uri uri)。
列表3: uridemo3.java
// uridemo3.java
import java.net.*;
class uridemo3
{
ublic static void main (string [] args) throws exception
{
if (args.length != 2)
{
system.err.println ("usage: " +
"java uridemo3 uribase urirelative");
return;
}
uri uribase = new uri (args [0]);
system.out.println ("base uri = " +uribase.tostring ());
uri urirelative = new uri (args [1]);
system.out.println ("relative uri = " +urirelative.tostring ());
uri uriresolved = uribase.resolve (urirelative);
system.out.println ("resolved uri = " +uriresolved.tostring ());
uri urirelativized = uribase.relativize (uriresolved);
system.out.println ("relativized uri = " +urirelativized.tostring ());
}
}
在编译uridemo3后,在命令行输入java uridemo3 http://www.somedomain.com/ x/../y. ,输出如下:
base uri = http://www.somedomain.com/
relative uri = x/../y
resolved uri = http://www.somedomain.com/y
relativized uri = y
上面的输出显示相对的uri的x/../y根据基础uri http://www.somedomain.com/分解并(在?m.相对的uri。
技巧
调用uri的tourl()方法把uri转换为url。
闽公网安备 35060202000074号