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

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();

   }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值