Java 必知必会的 URL 和 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代表的是一种资源,它使用的是统一资源定位格式,形如: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对象只能是用 http://URL (注意我这里只是写了一个格式而已)来创建,并调用HttpURLConnection对象的openConnection函数,然后把返回的URLConnection值赋给HttpURLConnection。

谁是幕后推手?

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();
    }
}
复制代码

免责声明:务必仔细阅读

  • 本站为个人博客,博客所转载的一切破解、path、补丁、注册机和注册信息及软件等资源文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。

  • 本站为非盈利性站点,打赏作为用户喜欢本站捐赠打赏功能,本站不贩卖软件等资源,所有内容不作为商业行为。

  • 本博客的文章中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.

  • 本博客的任何内容,未经许可禁止任何公众号、自媒体进行任何形式的转载、发布。

  • 博客对任何脚本资源教程问题概不负责,包括但不限于由任何脚本资源教程错误导致的任何损失或损害.

  • 间接使用相关资源或者参照文章的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 博客对于由此引起的任何隐私泄漏或其他后果概不负责.

  • 请勿将博客的任何内容用于商业或非法目的,否则后果自负.

  • 如果任何单位或个人认为该博客的任何内容可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明至admin@proyy.com.我们将在收到认证文件后删除相关内容.

  • 任何以任何方式查看此博客的任何内容的人或直接或间接使用该博客的任何内容的使用者都应仔细阅读此声明。博客保留随时更改或补充此免责声明的权利。一旦使用并复制了博客的任何内容,则视为您已接受此免责声明.

您必须在下载后的24小时内从计算机或手机中完全删除以上内容.

您使用或者复制了本博客的任何内容,则视为已接受此声明,请仔细阅读


更多福利请关注一一网络微信公众号或者小程序

一一网络微信公众号
打个小广告,宝塔服务器面板,我用的也是,很方便,重点是免费的也能用,没钱太难了,穷鬼一个,一键全能部署及管理,送你3188元礼包,点我领取https://www.bt.cn/?invite_code=MV9kY3ZwbXo=


一一网络 » Java 必知必会的 URL 和 URLConnection

发表评论

发表评论

一一网络-提供最优质的文章集合

立即查看 了解详情