分享
 
 
 

Java网络编程的学习笔记(二)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

第二部分 用URL检索数据

一.URL类

Java程序定位和检索网络上的数据最简单的方法是使用URL类。

Java.net.URL类是对统一资源定位符的抽象。URL对象建立后,它的字段就不再改变。

构造java.net.URL实例的六个构造器:

1) 用字符串构造URL

public URL(String url) throws MalformedURLException

2)用组件构造URL

public URL(String protocol,String hostname,String file) throws MalformedURLException

这个构造器将端口设置为-1,所以协议的所有默认端口都可以用。

3)用组件构造URL

public URL(String protocol,String host,int port,String file) throws MalformedURLException

对于默认端口不正确的极少见情况,这个构造器可以明确地用int变量指定端口

4) 构造相对URL

public URL(URL base,String relative) throws MalformedURLException

这个构造器根据相对URL和基本URL构造绝对URL

例如:

try

{

URL u1=new URL(“http://metalab.unc.edu/javafaq/index.html”);

URL u2=new URL(u1,”mailinglists.html”);

}

catch (MalformedURLException e)

{

System.err.println(e);

}

5) 指定URLStreamHandler

public URL(URL base,String relative,URLStreamHandler handler) throws MalformedURLException

这个构造器由一个基本URL和相对part构建一个相对URL,然后用指定的处理器处理URL

6) 指定URLStreamHandler

public URL(String protocol,String host,int port,String file,URLStreamHandler handler) throws MalformedURLException

这个构造器从它的组件部分构建URL,然后用指定的处理器处理URL。

除了这些构造器,Java类库中还有许多其他方法返回URL对象。其中大多数只是简单的获取方法,只返回用户可能已经知道的URL,因为用户已经首先用它来创建对象。

二.分解URL

URL可以认为是由五部分组成的:

1) 策略(scheme),也可以认为是协议

2) 权限

权限可以进一步分为用户信息、主机和端口。

3) 路径

4) 参考(ref),也称为节(section)或者已命名锚(named anchor)

5) 查询字符串

以只读方式访问URL这五部分的公共方法:

1) public String getProtocol()

getProtocol()方法返回一个String,包含URL的策略:比如:”http”,”https”,”file”等等。

2) public String getHost()

getHost()方法返回一个String,包含URL的主机名。

3) public int getPort()

getPort()方法返回端口号,该数值是一个在URL中指定的int。如果在URL中没有指定端口,那么getPort()方法返回-1,标志着URL没有明确指定端口,同时使用协议的默认端口。

4) public String getFile()

getFile()方法返回一个String,其中包含URL的路径和文件部分。从主机名后的第一个“/”开始,到另起一部分的“#”之前的符号,全部认为是文件部分。

5) public String getPath()

它与getFile()方法意义相同。

6) public String getRef()

getRef()返回URL的命名锚部分。如果URL没有一个已命名的锚,那么这个方法返回null。

例如:

try

{

URL u=new URL(“http://metalab.unc.edu/javafaq/javafaq.html#xtocid1902914”);

System.out.println(“The ref of ”+u+ “ is ”+u.getRef();

}

catch (MalformedURLException e)

{

System.err.println(e);

}

这段代码返回中,getRef()返回的字符串xtocid1902914

7) public String getQuery()

getQuery()方法返回URL的查询字符串。如果URL没有查询字符串,那么这个方法返回null。

8)public String getUserInfo()

某些URL包含用户名,并且甚至包含密码信息。它位于策略之后和主机名之前,“@”符号划定它的范围。如果URL不包含任何用户信息,那么这个方法返回null。Mailto URL会出现例外,在mailto:elharo@metalab.unc.edu 这样的URL中,elharo@metalab.unc.edu是路径,而不是用户信息和主机名。

9)public String getAuthority()

getAuthority()返回URL的权限。包括用户信息、主机名和端口。

三.从URL检索数据

1) public final InputStream openStream() throws IOException

openStream()方法连接URL参考的资源,实现客户机和服务器之间所有必要的握手连接,并且从可读数据返回InputStream。从InputStream得到的数据是URL参考文件的原始(即没有解析过的)内容。

2) public URLConnection openConnection() throws IOException

openConnection()方法打开一个到指定URL的套接字并且返回一个URLConnection对象。URLConnection代表一个到网络资源的开放连接。

3) public final Object getContent() throws IOException

getContent()方法检索URL参考的数据,并且试图把它转换成对象的某个类型。

4) public final Object getContent(Class[] classes) throws IOException

getContent()方法的重载变量使得可以选择我们想要的类作为返回内容,这个方法试图按数组中的顺序返回URL的内容。

例如:

URL u=new URL(“http://nwu.org”);

Class[] types=new Class[3];

types[0]=String.class;

types[1]=Reader.class;

types[2]=InputStream.class;

object o=u.getContent(types);

然后必须用instanceof测试返回对象的类型

if (o instanceof String)

{

System.out.println(o);

}

else if (o instanceof Reader)

{

int c;

Reader r=(Reader) c;

while ((c=r.read()) != -1)

System.out.print((char) c);

}

else if (o instanceof InputStream)

{

int c;

InputStream in=(InputStream) o;

While ((c=in.read()) != -1)

System.out.write(c);

}

else

{

System.out.println(“Error:unexcepted type ”+o.getClass());

}

四.工具方法

1) public boolean sameFile(URL other)

sameFile()方法测试测试两个URL对象是否指向同一个文件。sameFile()执行的检测非常肤浅,它只是比较相对立的字段是否相等。sameFile()和equals()有相似之处,差别在于equals()需要考虑所有任何参数,而sameFile()不考虑。此外,任何类都可以传递到equals(),却只有URL类能传递到sameFile()。

2) public String toExternalForm()

toExternalForm()和toString()方法相同。

五.对象方法

URL是从java.lang.Object继承来的,所以可以访问Object类的全部方法。类似于IentAddress类的对象方法。

六.协议处理器方法

1) public static synchronized void setURLStreamHandlerFactory(URLStreamHandleFactory factory)

这个方法为应用程序设置URLStreamHandleFactory,如果已经设置了类库,则此方法触发一个通用Error。

2) public void set(String protocol,String host,int port,String authority,String userInfo,String path,String query,String ref)

七.URLEncoder和URLDecoder类

java.net.URLEncoder类包含一个叫encode()的单一静态方法

public static String encode(String s)

URLEncoder.Encoder()把任何非文字数字字符(除了空格、下划线、连字号、句点和星号)都转换位%序列,空格被转换为加号。

URLEncoder的主要用途在于为使用GET的CGI程序的通信准备查询字符串。

URLDecoder类把所有的加号转换位空格,把所有的百分号转义符转换为相应的字符。

public static String decode(String s) throws Exception

如果字符串包含一个百分号,而其后没有两个十六进制的数字,那么就会触发一个IllegalArgumentException。这个方法传递的是非转义字符,所以用户可以传递一个完整的URL。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有