文章目录
- 0. 概述
- 1. URL组成
- 1.1 概念:
- 1.2 端口:
- 2. 常用API
- 3. 示例
- 3.1 简单示例:
- 3.2 使用URL下载网络资源
0. 概述
-
概念:
URL(Uniform Resource Locator):统一资源定位符,它表示Internet上某一资源的地址
资源可以是文件或目录这样简单的东西,也可以是对更复杂的对象的引用,例如对数据库或搜索引擎的查询,常见的www,ftp站点等
浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源
在互联网发展过程中,最重要的三大发明:HTTP+HTML+URL,他们组成了网络的三大基石
-
URI=URL+URN
URI:Uniform Resource Identifier ,统一资源标志符
URL:Uniform Resource Locator,统一资源定位符
URN:Uniform Resource Name,统一资源命名
1. URL组成
1.1 概念:
URL的基本结构由5部分组成:
<传输协议>://<主机名>:<端口号>/<文件名>#片段名?参数列表
<>表示可选
片段名:即锚点,例如在boss直聘上可以直接定位到具体薪资
参数列表格式:参数名=参数值&参数名=参数值…
示例:http://www.example.com/dos/resources1.html
表示要使用的协议是
http
(超文本传输协议),并且该信息驻留在名为www.example.com
的主机上。 该主机上的信息名为/docs/resource1.html
。 主机上此名称的确切含义是依赖于协议和依赖于主机。 信息通常驻留在文件中,但可以在运行中生成
1.2 端口:
-
URL可以选择指定“端口”,该端口是在远程主机上进行TCP连接的端口号。 如果未指定端口,则使用协议的默认端口。 例如,
http
的默认端口为80
。 备用端口可以指定为:http://www.example.com:1080/docs/resource1.html
2. 常用API
- URL类位于java.net包下
- 构造器:
构造器 | 说明 |
---|---|
URL(String spec) | 根据 String 表示形式创建 URL 对象 |
URL(String protocol, String host, int port, String file) | 根据指定协议名、主机名、端口号和文件名创建 URL 对象 |
URL(String protocol, String host, String file) | 根据指定的协议名、主机名和文件名创建 URL |
- 常用API:
方法名 | 说明 |
---|---|
String getProtocol() | 获取此 URL的协议名称 |
String getHost() | 获取此 URL 的主机名 |
int getPort() | 获取此 URL 的端口号 |
String getPath() | 获取此 URL 的文件路径 |
String getFile() | 获取此 URL 的文件名 |
String getQuery() | 获取此 URL的查询部分 |
URLConnection openConnection() | 返回一个URLConnection实例,表示与URL引用的远程对象的URL |
int getDefaultPort() | 获取与此 URL 关联的协议的默认端口号 |
-
抽象类
URLConnection
(不是URL的子类)是表示应用程序和URL之间的通信链接的所有类的超类此类的实例可用于读取和写入URL引用的资源
-
URLConnection类中的常用API:
方法名 | 说明 |
---|---|
InputStream getInputStream() | 返回从此打开的连接读取的输入流 |
- HttpURLConnection和JarURLConnection是URLConnection的子类
- 其中JarURLConnection是用于连接到Java ARchive(JAR)文件或jar文件中的条目的
- HttpURLConnection支持HTTP特定功能,可用于向应用程序发出请求交互数据
3. 示例
3.1 简单示例:
import java.net.MalformedURLException;
import java.net.URL;
public class URLDemo {
public static void main(String[] args) {
try {
URL url = new URL("http://www.example.com:1080/docs/resource1.html?username=123");
System.out.println(url.getProtocol()); // 获取协议名: http
System.out.println(url.getHost());//获取主机名: www.example.com
System.out.println(url.getPort());//获取端口号: 1080
System.out.println(url.getPath());//获取文件路径: /docs/resource1.html
System.out.println(url.getFile());//获取文件名: /docs/resource1.html?username=123
System.out.println(url.getQuery());//获取查询名: username=123
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
3.2 使用URL下载网络资源
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLDemo {
public static void main(String[] args) {
HttpURLConnection urlConnection = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//下载地址
URL url = new URL("https://img-blog.csdnimg.cn/95a4f168da1e4f9ab257a28b723b07d0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn5ZyG5a2Q5ZWK,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center");
//连接到这个资源 HTTP
urlConnection = (HttpURLConnection) url.openConnection();
bis = new BufferedInputStream(urlConnection.getInputStream());
bos = new BufferedOutputStream(new FileOutputStream("D:/a.png"));
byte[] buffer = new byte[1024];
int len = 0;
while ((len=bis.read(buffer)) != -1){
bos.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//释放资源
urlConnection.disconnect();//断开连接
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}