当前课程知识点:JAVA程序设计进阶 > 第四章 网络编程(上) > 4.1 URL对象 > Video
各位同学大家好
这一节我们将介绍
如何Java来访问互联网上的外部资源
尤其是如何通过Java的URL对象
来访问网络资源
互联网上的很多资源
都是通过IP地址来进行表示的
那第一版的IP地址
指的是IPv4地址
它总共32位有4个字节
我给大家举个例子
比如说166.111.136.3
这是一个IP地址
但这个地址的话
大家还有可能能记得住它
但是随着互联网资源越来越多
原有的地址已经无法表示
这么多资源了
那我们又出现了IPv6的地址
那IPv6的地址
总共包含128位16个字节
那它能够表示的这个地址范围
更加宽广
因为IP地址并不容易让人类记住
所以在互联网上又出现另一套机制
就是主机名也叫域名
比如说清华大学的域名就是
www.tsinghua.edu.cn
那这样的一个域名的话
人类是非常容易记住的
它背后也对应着有一个IP地址
那另外一个概念叫端口号
也就是说我们一台服务器
或者某一个IP地址
它在提供服务的时候
它可以提供多种服务
每种服务都通过端口号来进行服务
比如说80端口
就是我们通常访问外部资源的时候
用的这个端口
包括21端口是进行ftp时候使用的
23端口是进行远程登录telnet使用的
那25端口是我们用来发送邮件
比如smtp这个协议
它要用到这个端口
那再整个端口号当中
1到1024为保留端口
一般我们自己写程序的话
最好不要使用这些端口
那我们怎么能理解这个端口呢
其实这个端口号
就相当于大家去银行
你要去取钱
那到了一家银行里面
这个柜员会为大家提供服务
那它是通过我们那个银行里面的窗口
给大家服务的
每个窗口后面坐一个柜员
所以相当于我们这里的端口号
就相当于我们银行里的一个窗口
而每一家具体的银行
就相当于我们某一台具体的这个服务器
在这个服务器上面
它可以提供多种类型的服务
比如说有http telnet ftp smtp等等
那互联网上有这么多的有用的信息
我们怎么能够把它读取下来
或者说抓取下来
放到我们的电脑上去加以利用和分析
给大家举个例子
比如说新浪网上面有很多新闻
你想不想把这个新浪网的
所有的相关的这个新闻
都给抓下来呢
我们看我们这个例子
import java.net*
那由于我们要用到网络这个资源
所以我们要一定要用到网络这个包
那java.net就是我们的网络包
然后第二行import.java.io.*
我们要用到这个输入输出流
所以要把这个io这个包给导入进来
我们自己这个类名叫public classURL reader
就是网络资源的读取器
那它有个主方法
主方法里面throws Exception
就是主方法要抛弃各种这个异常
我们看主方法里面到底有哪些代码
URL cs=new URL
http://www.sina.com/
那URL是我们java.net这个包里面的一个类
这个类就用来表示互联网上的一个网站
或者说一个资源
那我们在实际画它的时候
我们给它一个域名
那现在我们给它的域名
就是新浪网的域名
那表明我们用URL cs这个对象
来去表示了互联网上新浪网的资源
那下面一步是我们想把新浪网的
这些内容读取下来
那怎么读呢
就需要用到我们过去曾经学过的
输入输出流的知识
我们构造了一个缓冲输入流
Buffered Reader in
然后调入它的构造方法
new BuferReader
而构造方法里的参数是什么呢
newInputStreamReader
这是一个输入流的一个转换流
然后里面还有一个参数
cs.openStream
cs就是我们刚才那个URL这个对象
open Stream的话就是打开它这个流
它是一个输入流
这样的话我们就构造了一个
Buffered Reader in
那下面我们要去BufferedReader
去读取内容了
我们首先构造了一个字符串对象
inputLine
然后下一句是while inputLine=in.readLine
那我们读一行
我们从这个输入流读一行
实际上就是从我们的
互联网上的新浪这个网站
去读它的一行
读完一如果它读出来不等于空
也就是说没有读到结尾处
我们就把这一行的内容给输出打印出来
但是等这些所有内容都读完了以后
我们就关闭这个流
那这个程序就可以把新浪网的内容
给它抓到你的电脑上
当然需要提醒大家注意的是
你抓的只不过是新浪网的
首页的那个html
如果你还想要再往下
这个各种链接往下抓取的话
你还得自己写程序
去读取它的二级链接
但是这个程序已经非常有意思了
所以我们的同学
可以下去回去运行这个程序
然后把你想要抓的
抓取的网络资源
放在我们这个程序里面
比如现在我说的是抓新浪
你也可以抓搜狐
那在这里面我们用到一些类
首先用到的是URL类
这个类的话是一致资源定位器的简称
它表现的是互联网上
某一个资源的地址
那当我们表示地址的时候
它的格式是这样的
前面是协议protocol加一个冒号
后面是具体的这些资源的名称
当然我们协议有很多种了
最常见的比如说用htttp ftp等等
资源名后面应该是完整的资源地址
包括它的主机名 端口号 文件名
甚至是文件内部的一个引用
我给大家举这几个例子
比如说第一个网站
http://www.sun.com/
那第二个这个资源是那个
home.netscape.com
然后后面还有welcome.html
把它的这个网页的这个名字也写出来
第三个资源名字
甚至在后面加了一个Bottom
也就是把这个网页中的位置
也给标出来了
第四个就是我们的file
表示的是我们当前文件目录上的一个资源
在这一页ppt上
大家看到的是构造URL对象的
很多构造方法
比如说第一个public URL string spec
那就是你直接把这个网络资源
以一个字符串的方式给它表示出来
并作为参数传递给URL资源
然后第二个的方法是public URL
URL context.String spet
也就是说我还可以用一个URL对象
来表示它的这个上下文的这个环境
然后我们可以看底下的很多例子
比如直接给一个资源名字
或者给一个资源名字后
后面再跟一个这个
(gamelan.game.hm)
这样的超文本文件等等之类
都可以来构造一个URL对象
那URL的话还有其他的这个构造方法
比如说通过字符串给出它的访问协议
通过字符串给它的主机名
以及通过字符串给出它的文件名
甚至另外一个这个构造方法
还可以给出我们这个资源的端口号
所以都可以很丰富的
表达了互联网上的这个资源
需要提醒大家的是
在我们构造URL对象的时候
一定要进行例外处理
那这个里面用的是try catch
然后catch是Malformed URLException
也就是一种不符合常规的URL格式的异常
因为你在给一个URL的地址的时候
有可能给的地址是不符合规范的
这时候我们的java也不知道怎么处理
所以就会给你抛出这种异常
URL它既然是一个类
它本身就会有很多方法
来访问这个类的对象的各种属性
比如说public String getProtocol
这个方法就能返回你所描述的
这个URL对象访问它的时候
所采用的协议
getHost获得它的主机名
getPort获得它的端口号
getFile获得它的这个文件名
getRef获得它的引用地址
这一节我们通过介绍URL对象
来表示互联网上的资源
通过这个类的很多方法
我们就能够很好的访问这些资源
-1.0 导学
--Video
-1.1 线程的基本概念
--Video
-1.1 线程的基本概念--作业
-1.2 通过Thread类创建线程
--Video
-1.2 通过Thread类创建线程--作业
-1.3 线程的休眠
--Video
-1.3 线程的休眠--作业
-1.4 Thread类详解
--Video
-1.5 通过Runnable接口创建线程
--Video
-1.5 通过Runnable接口创建线程--作业
-1.6 线程内部的数据共享
--Video
-2.0 导学
--Video
-2.1 线程同步的思路
--Video
-2.2 线程同步的实现方式—Synchronization
--Video
-2.3 线程的等待与唤醒
--Video
-2.4 后台进程
--Video
-2.5 线程的生命周期与死锁
--Video
-2.6 线程的调度
--Video
-3.0 导学
--Video
-3.1 线程安全与线程兼容与对立
--Video
-3.2 线程的安全实现-互斥同步
--Video
-3.3 线程的安全实现-非阻塞同步
--Video
-3.4 线程的安全实现-无同步方案
--Video
-3.5 锁优化
--Video
-4.0 导学
--Video
-4.1 URL对象
--Video
-4.2 URLConnection对象
--Video
-4.3 Get请求与Post请求
--Video
-4.4 Socket通信原理
--Video
-4.5 Socket通信实现
--Video
-5.0 导学
--Video
-5.1 Socket 多客户端通信实现
--Video
-5.2 数据报通信
--Video
-5.3 使用数据报进行广播通信
--Video
-5.4 网络聊天程序
--Video
-6.0 导学
--Video
-6.1 Java虚拟机概念
--Video
-6.2 Java虚拟机内存划分
--Video
-6.3 Java虚拟机类加载机制
--Video
-6.4 判断对象是否存活算法及对象引用
--Video
-6.5 分代垃圾回收
--Video
-6.6 典型的垃圾收集算法
--Video
-6.7典型的垃圾收集器
--Video
-7.0 导学
--Video
-7.1 集合框架与ArrayList
--Video
-7.2 LinkedList
--Video
-7.3 HashMap与HashTable
--Video
-7.4 TreeMap与LinkedHashMap
--Video
-7.5 HashSet
--Video
-8.0 导学
--Video
-8.1 Java反射机制
--Video
-8.2 Java静态代理
--Video
-8.3 Java动态代理
--Video
-8.4 Java 反射扩展-jvm加载类原理
--Video
-8.5 Java进阶课程总结
--Video