首页 文章详情

URL是什么?重新认识下URL吧

Java技术迷 | 349 2021-09-22 10:00 0 0 0
UniSMS (合一短信)

点击关注公众号,Java干货及时送达



关于java网络编程我们都非常熟悉TCP/IP协议,关于URL我么也都知道他就是家喻户晓的网址,那么我们对URL的了解可能也就到此为止了,除了知道他是网址还知道什么呢?

URL其实是一种资源

URL代表的是一种资源,它使用的是统一资源定位格式,形如:http://baidu.com,其实我们还可以用URL来构造对象的,使用字符串吗?不是的,java中有大量的构造函数允许使用一个个的分串来指定URL,有了URL对象就可以通过几个不用的方法来获取URL对应的内容,没错,我说的就是网页:

import java.net.*;
import java.io.*;
public class GetINt
{
    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.cadca.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(),"12312",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();
    }
}

总结

URL是众多我们熟悉而又陌生的技术之一,接触到一种技术,就应该深入进去,来深挖他背后还有什么别的有趣的技术,也就是这项技术是由哪些另外的技术支撑起来的,这可以让我们更好的了解和使用。


1、灵魂一问:你的登录接口真的安全吗?
2、HashMap 中这些设计,绝了~
3、在 IntelliJ IDEA 中这样使用 Git,贼方便了!
4、计算机时间到底是怎么来的?程序员必看的时间知识!
5、这些IDEA的优化设置赶紧安排起来,效率提升杠杠的!
6、21 款 yyds 的 IDEA插件
7、真香!用 IDEA 神器看源码,效率真高!

点分享

点收藏

点点赞

点在看

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter