Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • Java入门基础

  • Java核心基础

    • 多线程

    • Java常用类

    • 枚举类与注解

    • Java集合

    • 数据结构与算法

    • 泛型

    • IO流

    • 网络编程

      • 网络编程基础
      • InetAddress类
      • TCP编程
      • UDP编程
      • 发送Email
      • 接收Email
      • URL编程
        • URL类
          • 构造器
          • 常用方法
        • URLConnection类
          • 常用方法
        • 练习
        • URI、URL和URN的区别
        • 小结
      • HTTP编程
      • 计算机网络常见面试题
    • 反射

    • 函数式编程

  • 设计模式

  • Web开发

  • SpringBoot

  • 微服务

  • Elasticsearch

  • 运维

  • 后端
  • Java核心基础
  • 网络编程
SaulJWu
2021-01-10

URL编程

# URL类

URL(Uniform Resource Locator):统一资源定位符,它表示Internet 上某一资源的地址。

它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

通过URL 我们可以访问Internet 上的各种网络资源,比如最常见的www,ftp 站点。浏览器通过解析给定的URL 可以在网络上查找相应的文件或其他资源。

URL的基本结构由5部分组成:

  • <传输协议>://<主机名>:<端口号>/<文件名>#片段名?参数列表
    
    1

例如:

http://192.168.1.100:8080/helloworld/index.jsp#a?username=shkstart&password=123
1
  • #片段名:即锚点,例如看小说,直接定位到章节
  • 参数列表格式:参数名=参数值&参数名=参数值....

# 构造器

为了表示URL,java.net 中实现了类URL。我们可以通过下面的构造器来初始化一个URL 对象:

public URL (String spec);
public URL(URL context, String spec);
public URL(String protocol, String host, String file); 
public URL(String protocol, String host, intport, String file); 
1
2
3
4

URL类的构造器都声明抛出非运行时异常,必须要对这一异常进行处理,通常是用try-catch 语句进行捕获。

# 常用方法

一个URL对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:

public String getProtocol();     //获取该URL的协议名
public String getHost();        //获取该URL的主机名
public String getPort();        //获取该URL的端口号
public String getPath();        //获取该URL的文件路径
public String getFile();        //获取该URL的文件名
public String getQuery();      //获取该URL的查询名
1
2
3
4
5
6

# URLConnection类

针对HTTP协议的URLConnection类

URL的方法openStream():能从网络上读取数据

若希望输出数据,例如向服务器端的CGI (公共网关接口-Common Gateway Interface-的简称,是用户浏览器和服务器端的应用程序进行连接的接口)程序发送一些数据,则必须先与URL建立连接,然后才能对其进行读写,此时需要使用URLConnection。

URLConnection:表示到URL所引用的远程对象的连接。当与一个URL建立连接时,首先要在一个URL 对象上通过方法openConnection() 生成对应的URLConnection对象。如果连接过程失败,将产生IOException。

# 常用方法

通过URLConnection对象获取的输入流和输出流,即可以与现有的CGI程序进行交互。

public Object getContent( ) throws IOException
public intgetContentLength( )
public String getContentType( )
public long getDate( )
public long getLastModified( )
public InputStreamgetInputStream( )throws IOException
public OutputSteramgetOutputStream( )throws IOException
1
2
3
4
5
6
7

# 练习

@Test
void test03() {
    HttpURLConnection urlConnection = null;
    InputStream is = null;
    FileOutputStream fos = null;
    try {
        URL url = new URL("http://localhost:8080/examples/beauty.jpg");
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.connect();
        is = urlConnection.getInputStream();
        fos = new FileOutputStream("beauty3.jpg");
        byte[] buffer = new byte[1024];
        int len;
        while ((len = is.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("下载完成...");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# URI、URL和URN的区别

  • URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

  • 而URL是uniform resource locator,统一资源定位符,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

  • 而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。

也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。

# 小结

  • 位于网络中的计算机具有唯一的IP地址,这样不同的主机可以互相区分。
  • 客户端-服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实现面向连接的会话。
  • Java 中有关网络方面的功能都定义在java.net 程序包中。Java 用InetAddress对象表示IP 地址,该对象里有两个字段:主机名(String) 和IP 地址(int)。
  • 类Socket 和ServerSocket实现了基于TCP协议的客户端-服务器程序。Socket是客户端和服务器之间的一个连接,连接创建的细节被隐藏了。这个连接提供了一个安全的数据传输通道,这是因为TCP 协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络拥挤等问题,它保证数据可靠的传送。
  • 类URL 和URLConnection提供了最高级网络应用。URL 的网络资源的位置来同一表示Internet 上各种网络资源。通过URL对象可以创建当前应用程序和URL 表示的网络资源之间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。
帮我改善此页面 (opens new window)
#URL#URI#URN#HttpURLConnection
上次更新: 2021/01/10, 08:27:36
接收Email
HTTP编程

← 接收Email HTTP编程→

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式