你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

04_Java网络编程之URL介绍与使用

2021/12/21 3:54:32

文章目录

  • 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();
            }
        }
    }
}