一、URL基础认识
1、定义
URL(Uniform Resource Location),称为统一资源定位符,是指向互联网“资源”的指针。
资源:简单的文件或目录;对更为复杂的对象的引用。 (如:对数据库或搜索引擎的查询结果)
2、URL类
由的java.net包提供。
- 一个URL对象封装了一个具体资源的引用,有了这个引用就可以访问对应的资源。
3、一个完整的URL格式
协议名://主机地址[:端口号][/资源路径][/资源对象]
- 协议名:访问该网络资源所采用的协议(如:http,ftp等)
- 主机地址:网络资源所在的服务器地址,可以使用域名或IP地址(如:www.baidu.com)
- 端口号:连接主机服务的进程端口
注:①如果省略,则默认相关协议的熟知端口。(如:http协议的熟知端口是80,ftp的熟知端口是25);
②如果相关服务协议不使用熟知端口,则一定要给出端口号 - 资源路径:资源对象所在的路径。(如果省略,则为默认路径)
- 资源对象: 待访问的资源。(如:文件名。如果省略,则为默认资源对象)
4、创建一个URL对象(两种构造方法)
①public URL(String spec) throws MalformedURLException
spec:待解析的字符串形式的URL
try{
URL url = new URL("http://www.163.com:80/index.html")
}catch(MalformedURLException e){
System.out.println("URL error!");
}
②public URL(String protocal,String host,int port,String file) throws MalformedURLException
分别给出了 访问的协议、 主机地址、 端口 和 资源对象 等参数。
③public URL(String protocol, String host, String file) throws MalformedURLException
使用指定的协议、主机名、文件名创建URL,端口使用协议的默认端口。
二、URL类的方法
方法 | 描述 |
---|---|
public String getPath() | 返回URL路径部分 |
public String getQuery() | 返回URL查询部分 |
public int getPort() | 返回URL端口部分 |
public int getDefaultPort() | 返回协议的默认端口号。 |
public String getProtocol() | 返回URL的协议 |
public String getHost() | 返回URL的主机 |
public String getFile() | 返回URL文件名部分 |
public String getRef() | 获取此 URL 的锚点(也称为"引用")。 |
public URLConnection openConnection() throws IOException | 打开一个URL连接,并运行客户端访问资源。 |
实例:
import java.net.*;
import java.io.*;
public class Method {
public static void main(String[] args) {
try {
URL url = new URL("http://www.runoob.com/index.html?language=cn#j2se");
System.out.println("URL为:" + url.toString());
System.out.println("协议为:" + url.getProtocol());
System.out.println("验证信息:" + url.getAuthority());
System.out.println("文件名及请求参数:" + url.getFile());
System.out.println("主机名:" + url.getHost());
System.out.println("路径:" + url.getPath());
System.out.println("端口:" + url.getPort());
System.out.println("默认端口:" + url.getDefaultPort());
System.out.println("请求参数:" + url.getQuery());
System.out.println("定位位置:" + url.getRef());
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、网络资源访问
1、当创建成功一个URL对象后,就可以通过输入流来完成对资源的访问。
方法:
public final InputStream openStream() throws IOException
可以获得输入流,用于客户端从服务器读取
2、实例
- 从命令窗口读取一个网络资源(网页),并显示该资源的内容。
import java.net.*;
import java.io.*;
import java.util.*;
public class Example1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);// 创建一个输入对象
URL url;// 创建一个URL对象
InputStream in;// 创建一个输入流
String addr;// URL地址的字符串表示
String str;// 输入流的字符串表示
System.out.println("请输入一个URL地址");
addr = scanner.nextLine();// 从键盘读取一个URL字符串
try {
url = new URL(addr);// 创建URL对象
in = url.openStream();// 根据URL对象创建输入流
byte[] b = new byte[1024];
int n = -1;
while ((n = in.read(b)) != -1) {
str = new String(b, 0, n, "UTF-8");
System.out.print(str);
}
} catch (Exception e) {
System.out.println(e);
}
}
}
四、URLConnection类
1、openConnection() 返回一个 java.net.URLConnection。
例如:
- 如果你连接HTTP协议的URL, openConnection() 方法返回 HttpURLConnection 对象。
- 如果你连接的URL为一个 JAR 文件, openConnection() 方法将返回 JarURLConnection 对象。
- 等等…
2、常用方法
方法 | 描述 |
---|---|
Object getContent() | 检索URL链接内容 |
Object getContent(Class[] classes) | 检索URL链接内容 |
String getContentEncoding() | 返回头部 content-encoding 字段值。 |
int getContentLength() | 返回头部 content-length字段值 |
String getContentType() | 返回头部 content-type 字段值 |
int getLastModified() | 返回头部 last-modified 字段值。 |
long getExpiration() | 返回头部 expires 字段值。 |
long getIfModifiedSince() | 返回对象的 ifModifiedSince 字段值。 |
public void setDoInput(boolean input) | URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。 |
public void setDoOutput(boolean output) | URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。 |
public InputStream getInputStream() throws IOException | 返回URL的输入流,用于读取资源 |
public OutputStream getOutputStream() throws IOException | 返回URL的输出流, 用于写入资源。 |
public URL getURL() | 返回 URLConnection 对象连接的URL |
3、实例
在控制台打印指定网页的 HTML 内容。
import java.net.*;
import java.io.*;
public class URLConDemo {
public static void main(String[] args) {
try {
URL url = new URL("http://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String urlString = "";
String current;
while ((current = in.readLine()) != null) {
urlString += current;
}
System.out.println(urlString);
} catch (IOException e) {
e.printStackTrace();
}
}
}