介绍
介绍
在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(); }
可以看到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(); }
可以发现请求协议从https变成了http了,同时请求默认端口也从443变成了80了!
总结
Java的URL对象解析网址后得到的参数似乎更加全面,基本上我们不需要进行二次加工就可以直接使用了~~