同福

Java解析URL的方法【20211111】

介绍

介绍

在Java里面如何解析一个完整的URL网址呢?在PHP里面一个函数parse_url搞定,返回一个数组,里面包括了URL的全部组成部分的信息。那么在Java里面有没有这样的函数呢?

答案是肯定的,在Java里面也是有专门解析URL网址参数的,只不过在Java里面是通过一个对象来实现的,这个对象就是URL对象。

教程

HTTPS

首先我们来一个https的网址看看。

Map<String, Object> map = new LinkedHashMap<>();
URL url;

try {
    url = new URL("https://fuge:123456@tongfu.net:8080/home/35/tag/同福编程.html?q=java");
    map.put("协议", url.getProtocol());
    map.put("主机名称", url.getHost());
    map.put("请求端口", url.getPort());
    map.put("请求默认端口", url.getDefaultPort());
    map.put("请求路径", url.getPath());
    map.put("请求参数", url.getQuery());
    map.put("请求文件", url.getFile());
    map.put("认证信息", url.getAuthority());
    map.put("用户信息", url.getUserInfo());
    map.put("引用信息", url.getRef());
}
catch (MalformedURLException e) {
    e.printStackTrace();
}

home/topic/2021/1112/11/a3fc3a851ad6d83909b22eb35e398138.png

可以看到URL对象把传入的网址进行了拆解,把请求网址的协议、主机名称、端口、路径、参数包括认证信息都解析出来了。需要注意的是,这里的请求端口是实际请求端口,而请求默认端口是根据请求协议来的。

HTTP

接着我们再来一个http的网址看看和https有什么不同。

Map<String, Object> map = new LinkedHashMap<>();
URL url;

try {
    url = new URL("http://fuge:123456@tongfu.net:8080/home/35/tag/同福编程.html?q=java");
    map.put("协议", url.getProtocol());
    map.put("主机名称", url.getHost());
    map.put("请求端口", url.getPort());
    map.put("请求默认端口", url.getDefaultPort());
    map.put("请求路径", url.getPath());
    map.put("请求参数", url.getQuery());
    map.put("请求文件", url.getFile());
    map.put("认证信息", url.getAuthority());
    map.put("用户信息", url.getUserInfo());
    map.put("引用信息", url.getRef());
}
catch (MalformedURLException e) {
    e.printStackTrace();
}

home/topic/2021/1112/11/cb1235b06b98187b76fc11b03ae8b51c.png

可以发现请求协议从https变成了http了,同时请求默认端口也从443变成了80了!

总结

Java的URL对象解析网址后得到的参数似乎更加全面,基本上我们不需要进行二次加工就可以直接使用了~~