您的位置:首页 > 理论基础 > 计算机网络

心得16--网络编程7-Url-解密IE的神秘面纱

2012-09-14 13:45 507 查看
1. URL(Uniform Resource Locator)类代表统一资源定位器,统一资源定位器是指互联网“资源”的名称。资源可以是简单的文件或目录,也可以是对跟为复杂的对象的引用,例如:对数据库或搜索引擎的查询。通常URL可以由协议名、主机、端口号和资源组成。URL的格式为“protocol://host:port/resourceName”。例如:http://ww.csdn.index.htm.

2. URL创建对象有两种:一种是绝对地址,URL url= new URL(“http://www.baidu.com”);还有一种相对地址,URL
urla= new URL(“http://www.baidu.com”);URLurl = new URL(url,“a.html”);

3. URL的方法:

以一实例来演示这些方法的简单用法。

packagecom.Url;

importjava.net.MalformedURLException;

importjava.net.URL;

publicclass Demo {

/**

* @param args

* @throws MalformedURLException

*/

publicstaticvoid main(String[] args)
throws MalformedURLException {

URL url = new URL("http://java.sun.com:80/docs/books/tutorial"

+"/index.html?name=networking#DOCWNLOADING");

//下面就是各种方法的用法:

System.out.println("filename= "+ url.getFile());
//filename=path+query



System.out.println("protocol= "+ url.getProtocol());



System.out.println("authority= "+ url.getAuthority());
//授权,公司签名 authority=host+port



System.out.println("host ="+ url.getHost());



System.out.println("port ="+ url.getPort());



System.out.println("path ="+ url.getPath());



System.out.println("query ="+ url.getQuery());



System.out.println("rel ="+ url.getRef());
//获取锚点

}

}

/*

*
执行结果

filename = /docs/books/tutorial/index.html?name=networking

protocol=
http

authority= java.sun.com:80

host= java.sun.com

port= 80

path= /docs/books/tutorial/index.html

query= name=networking

rel =DOCWNLOADING

*/

另外还有方法:

URLConnectionopenConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。

InputStreamopenStream():打开与此URL的连接,并返回一个用于读取URL资源的InputStream.

4. URLDecoder类和URLEncoder类用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换。这就可以解释我们在用IE浏览器时地址栏中的乱码了。其实这不是乱码而是所谓的“application/x-www-form-urlencodedMIME字符串”

5. 当URL地址中含有非西欧字符的字符串时,系统会将这些非西欧字符串转换成我们认为的乱码。这里乱码与普通字符串的转换用到一下方法:

URLDecoder类中的decoder(Strings,String enc)静态方法,它可以将乱码转换成普通字符串。

URLEncoder类中的encoder(Strings,String enc)静态方法,它可以将普通字符串转换成pplication/x-www-form-urlencoded MIME字符串。

乱码转换详细请看下面实例:

packagecom.Url;

importjava.io.UnsupportedEncodingException;

importjava.net.URLDecoder;

importjava.net.URLEncoder;

publicclass TestUrl {

/**

* 演示浏览器地址栏中的‘乱码’与字符串的互相转换

* @param args

*/

publicstaticvoid main(String[] args) {

try {

//将普通字符串转换成application/x-www-form-urlencoded字符串

String str1 = URLEncoder.encode("java程序","UTF8");

System.out.println(str1);

//将application/x-www-form-urlencoded转换成字符串普通字符串

String str2 = URLDecoder.decode("编码转换成字符串:...."+"java%E7%A8%8B%E5%BA%8F","UTF-8");

System.out.println(str2);

} catch (UnsupportedEncodingException e) {

System.out.println(e.getMessage());
//返回此
throwable 的详细消息字符串。

/*e.printStackTrace(); 将此
throwable 及其追踪输出至标准错误流。

此方法将此 Throwable
对象的堆栈跟踪输出至错误输出流,作为字段 System.err
的值。

输出的第一行包含此对象的 toString()
方法的结果。

剩余行表示以前由方法 fillInStackTrace()
记录的数据*/

}

}

}

6. 需要注意的是:

仅包含西欧字符的普通字符串和pplication/x-www-form-urlencodedMIME字符串无需转换,而包含中文字符的普通字符串则需要转换。转换的方法是每个中文字符占两个字节,每个字节可以转换成两个十六进制的数字,所以每个中文字符将转换成%XX%XX的形式。当然,采用不同的字符集时,每个中文字符对应的字节数并不完全相同,所以使用URLEncoder和URLDecoder进行转换时也需要指定字符集

通过程序下载网页信息。案例分析:

packagecom.Url;

importjava.io.BufferedReader;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.net.URL;

publicclass UrlDemo {

/**

* @param args

* @throws IOException

*/

publicstaticvoid main(String[] args)
throws IOException {

URL url = new URL("http://www.baidu.com");

BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));

FileOutputStream fos = new FileOutputStream("d:\\baidu.html");

String line = null;

while((line=br.readLine())!=null) {

fos.write(line.getBytes());

System.out.println(line);

}

fos.close();

br.close();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: