浅谈Java中的URL和URLConnection

 更新时间:2023年08月10日 09:11:40   作者:ycfxhsw  
这篇文章主要介绍了浅谈Java中的URL和URLConnection,URL代表的是一种资源,它使用的是统一资源定位格式, 其实我们还可以用URL来构造对象的,java中有大量的构造函数允许使用一个个的分串来指定URL,需要的朋友可以参考下

URI 和 URLConnection

java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号。

java.net.URLConnection 则代表了应用程序和 URL 之间的通信链接,可用于读取和写入此 URL 引用的资源。

  • URI = Universal Resource Identifier ,中文释义为统一资源标志符
  • URL = Universal Resource Locator ,中文释义为统一资源定位符
  • URN = Universal Resource Name ,中文释义为统一资源名称

URI 可以分为 URL 和 URN,或者是 URL 和 URN 的结合体(同时具备 Locator 和 Name)。

URN 就好像一个人的名字,URL 就像一个人的地址。

换句话说:URN 确定了身份,URL 提供了找到它的方式。

URL其实是一种资源

URL代表的是一种资源,它使用的是统一资源定位格式,形如:https://juejin.cn, 其实我们还可以用URL来构造对象的,使用字符串吗?

不是的,java中有大量的构造函数允许使用一个个的分串来指定URL,有了URL对象就可以通过几个不用的方法来获取URL对应的内容,没错,我说的就是网页:

import java.net.*;
import java.io.*;
public class IntTest{
    public static void main(String [] args) throws Exception{
        URL url = new URL(args[0]);
        InputStream html = url.openStream();
        int c;
        do{
            c = html.read();
            if(c != -1){
                System.out.print((char) c);
            }
        }while(c != -1);
    }
}

URLConnection

一般静态的操作就都是很容易的,使用一个URL对象读取一个URL简直不要太容易,刚才说的静态是我自己起的,其实并没有这个说法,而是我联想到数据结构,像读取这样的操作都是静态的 ,于是我在这里也算是做相同的比喻;

如果你想对HTTP事务做更多的控制呢?

比如说我们肯定需要往服务器提交一些数据,需要URL对象的 openConnection 函数,这个函数可以返回一个 URLConnection 对象,如果URL使用了HTTP协议,那么URLConnection 对象会返回一个URLConnection的子类:HttpURLConnection;

import java.net.*;
import java.io.*;
public class Handin{
    public static void main(String [] args) throws Exception{
        URL url=new URL(""http//com.aaaaa.com"");//网址瞎编的
        HttpURLConnection con=(HttpURLConnection)url.openConnection();
        int c;
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setrequestMethod("POST");
        con.setRequestProperty("Content-type","application/X-WWW-form-urlencoded");
        con.connect();
        PrintWriter pri=new PrintWriter{
        new OutputStreamWriter{con.getOutputStream(),"12321",true}
        pri.print("sasd"+URLEncoder.encode(args[0]+'dasda'));
        pri.flush();
        System.out.println(con.getResponseMessage());
        InputStream in=con.getInputStream();
        do{
            char x;
            c=in.read();
            x=(char)c;
            if(c!=-1){
                System.out.print(x);
            }
        }while(c!=-1);
    }
}

关于HttpURLConnection,获取HttpURLConnection对象只能是用 //URL (注意我这里只是写了一个格式而已)来创建,并调用HttpURLConnection对象的openConnection函数,然后把返回的URLConnection值赋给HttpURLConnection。

URLStreamHandler

URL和URLConnection都是指派URLStreamHandler和URLConnection来干活,经过封装之后,URL对象会检查他的URL协议端口,然后调用URLStreamHandlerFactory的一个对象,这个对象主要用于创建URLStreamHandler子类,使得与指定的协议相符合;

子类URLStreamHandler创建一个相应的URLConnection对象,也解析URL,这样你可以定义用户化URL格式,对象URLConnection通常都是和服务器打交道的。

import java.net.*;
import java.io.*;
public class TimeURLConnection extends URLConnection{
    private Socket con;
    public final static int de=13;
    public TimeURLConnection void connect() throws IOException{
        if(!=connected){
            int port=url.getPort();
            if(port<0) port=de;
            con=new Socket(url.getHost(),port);
            connected=true;
        }
    }
    public synchronized InputStream getInputStream() throws IOException{
        connect();
        return con.getInputStream();
    }
}

到此这篇关于浅谈Java中的URL和URLConnection的文章就介绍到这了,更多相关Java的URL和URLConnection内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot项目为何引入大量的starter?如何自定义starter?

    SpringBoot项目为何引入大量的starter?如何自定义starter?

    这篇文章主要介绍了SpringBoot项目为何引入大量的starter?如何自定义starter?文章基于这两个问题展开全文,需要的小伙伴可以参考一下
    2022-04-04
  • Java代码为例讲解堆的性质和基本操作以及排序方法

    Java代码为例讲解堆的性质和基本操作以及排序方法

    堆数据结构可以看作一颗完全二叉树,因而又被成为二叉堆,这里我们以Java代码为例讲解堆的性质和基本操作以及排序方法,需要的朋友可以参考下
    2016-06-06
  • Java中的接口知识汇总

    Java中的接口知识汇总

    本文给大家汇总介绍了在java中的接口知识,包括为什么要使用接口、什么是接口、抽象类和接口的区别、如何定义接口以及定义接口注意点,希望大家能够喜欢
    2016-04-04
  • JavaCV实现图片中人脸检测的示例代码

    JavaCV实现图片中人脸检测的示例代码

    这篇文章主要介绍了如何利用JavaCV实现图片中人脸检测的功能,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
    2022-11-11
  • jfreechart画折线图的方法

    jfreechart画折线图的方法

    这篇文章主要为大家详细介绍了jfreechart画折线图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • VSCode中开发JavaWeb项目的详细过程(Maven+Tomcat+热部署)

    VSCode中开发JavaWeb项目的详细过程(Maven+Tomcat+热部署)

    这篇文章主要介绍了VSCode中开发JavaWeb项目(Maven+Tomcat+热部署),本文分步骤通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • SpringBoot实现AOP切面的三种方式

    SpringBoot实现AOP切面的三种方式

    Spring,SpringBoot框架凭借多种高效机制,显著增强了代码的功能性,并实现了切面编程(AOP)的精髓,其核心亮点之一,是运用动态代理技术,无需触动源代码即可在Bean的运行时为其动态织入额外功能,本文给大家介绍了SpringBoot通过3种方式实现AOP切面,需要的朋友可以参考下
    2024-08-08
  • druid ParserException类错误问题及解决

    druid ParserException类错误问题及解决

    这篇文章主要介绍了druid ParserException类错误问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Spring Boot 定制与优化内置的Tomcat容器实例详解

    Spring Boot 定制与优化内置的Tomcat容器实例详解

    本文主要记录对内置容器优化和定制的方式,用于自己加深对SpringBoot理解。本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
    2017-12-12
  • springboot中的RestTemplate使用详解

    springboot中的RestTemplate使用详解

    这篇文章主要介绍了springboot中的RestTemplate使用详解,RestTemplate继承自InterceptingHttpAccessor并且实现了RestOperations接口,其中RestOperations接口定义了基本的RESTful操作,这些操作在RestTemplate中都得到了实现,需要的朋友可以参考下
    2023-09-09

最新评论