JAVA 类 URL

来源:互联网 发布:redis同步mysql 编辑:程序博客网 时间:2024/06/13 15:13

简介

类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。

示例:http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html

通常,URL 可分成几个部分。上面的 URL 示例指示使用的协议为 http (超文本传输协议)并且该信息驻留在一台名为 www.socs.uts.edu.au 的主机上。主机上的信息名称为 /MosaicDocs-old/url-primer.html。主机上此名称的准确含义取决于协议和主机。该信息一般存储在文件中,但可以随时生成。该 URL 的这一部分称为路径 部分。

URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,则使用协议默认的端口。例如,http 协议的默认端口为 80。还可以指定一个备用端口,如下所示:

 http://www.socs.uts.edu.au:80/MosaicDocs-old/url-primer.html

URL 后面可能还跟有一个“片段”,也称为“引用”。该片段由井字符 “#” 指示,后面跟有更多的字符。例如,

 http://java.sun.com/index.html#chapter1

从技术角度来讲,URL 并不需要包含此片段。但是,使用此片段的目的在于表明,在获取到指定的资源后,应用程序需要使用文档中附加有 chapter1 标记的部分。标记的含义特定于资源。

应用程序也可以指定一个“相对 URL”,它只包含到达相对于另一个 URL 的资源的足够信息。HTML 页面中经常使用相对 URL。例如,假设 URL 的内容是:

 http://java.sun.com/index.html

其中包含的相对 URL:
FAQ.html

为以下形式的缩写:
http://java.sun.com/FAQ.html

相对 URL 不需要指定 URL 的所有组成部分。如果缺少协议、主机名称或端口号,这些值将从完整指定的 URL 中继承。但是,必须指定文件部分。可选的片段部分不继承。

URL 类自身并不根据 RFC2396 中定义的转义机制编码或解码任何 URL 部分。由调用方对任何需要在调用 URL 前进行转义的字段进行编码,并对从 URL 返回的任何经过转义的字段进行解码。进一步而言,由于 URL 不懂 URL 转义,所以它不会识别同一 URL 的对等编码和解码形式。例如,对于这两个 URL:

http://foo.com/hello world/ 和 http://foo.com/hello%20world

将被视为互不相等。

注意,URI 类在某些特定情况下对其组成字段执行转义。建议使用 URI 管理 URL 的编码和解码,并使用 toURI() 和 URI.toURL() 实现这两个类之间的转换。

具体使用

构造函数&方法

具体见:
http://www.javaweb.cc/help/JavaAPI1.6/index.html?java/nio/ReadOnlyBufferException.html

构造函数:

(1) URL ( String url)
  //url代表一个绝对地址,URL对象直接指向这个资源,如:
  URL urll=new URL(http://www.cqwu.edu.cn);

(2) URL ( URL baseURL , String relativeURL)
 // 其中,baseURL代表绝对地址,relativeURL代表相对地址。如:
  URL urll=new URL(http://www.cqwu.edu.cn);
  URL lib=new URL(urll , “library / library.asp”);

(3) URL ( String protocol , String host , String file)
  //其中,protocol代表通信协议,host代表主机名,file代表文件名。如:
  new URL (“http” , www.cqwu.edu.cn, “/ test / test.asp”);

(4) URL ( String protocol , String host , int port , String file)
  URL lib = new URL (“http” , www.cqwu.edu.cn, 80 , “/ test / test.asp”);

具体代码

import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;/* * URL常用方法 */public class Test02 {    public static void main(String[] args) {        try {            // 创建一个URL实例            URL imooc = new URL("http://www.imooc.com");            // ?后面表示参数,#后面表示锚点            URL url = new URL(imooc, "/index.html?username=tom#test");            System.out.println("协议:" + url.getProtocol());            System.out.println("主机:" + url.getHost());            System.out.println("授权:" + url.getAuthority());            System.out.println("内容:" + url.getContent());            System.out.println("userifno" + url.getUserInfo());            System.out.println(" URL 所引用的远程对象的连接" + url.openConnection().toString() );            // 如果未指定端口号,则使用默认的端口号,此时getPort()方法返回值为-1            System.out.println("端口:" + url.getPort());            System.out.println("文件路径:" + url.getPath());            System.out.println("文件名:" + url.getFile());            System.out.println("相对路径:" + url.getRef());            System.out.println("查询字符串:" + url.getQuery());        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

使用URL读取网页内容

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;/* * 使用URL读取网页内容 */public class Test03 {    public static void main(String[] args) {        try {            //创建一个URL实例            URL url = new URL("http://www.baidu.com");            //通过URL的openStream方法获取URL对象所表示的资源的字节输入流            InputStream is = url.openStream();            //将字节输入流转换为字符输入流            InputStreamReader isr = new InputStreamReader(is, "utf-8");            //为字符输入流添加缓冲            BufferedReader br = new BufferedReader(isr);            String data = br.readLine();//读取数据            while (data != null) {//循环读取数据                System.out.println(data);//输出数据                data = br.readLine();            }            br.close();            isr.close();            is.close();        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    }
0 0
原创粉丝点击