如何将URL分解为Java中的组件部分?

时间:2011-07-31 16:06:01

标签: java

我的要求相当简单,但我需要做很多这样的事情,所以我正在寻找一个强大的解决方案。

是否有一个很好的轻量级库,用于将URL分解为Java中的组件部分?我指的是主机名,查询字符串等。

5 个答案:

答案 0 :(得分:7)

我总是忘记URI格式,所以这里是:

<scheme>://<userinfo>@<host>:<port><path>#<fragement>

这是一个例子:

URI uri = new URI ("query://jeff@books.com:9000/public/manuals/appliances?stove#ge");

将发生以下情况:

  • uri.getAuthority()将返回"jeff@books.com:9000"
  • uri.getFragment ()将返回"ge"
  • uri.getHost ()将返回"books.com"
  • uri.getPath ()将返回"/public/manuals/appliances"
  • uri.getPort ()将返回9000
  • uri.getQuery ()将返回"stove"
  • uri.getScheme ()将返回"query"
  • uri.getSchemeSpecificPart ()将返回"//jeff@books.com:9000/public/manuals/appliances?stove"
  • uri.getUserInfo ()将返回"jeff"
  • uri.isAbsolute ()将返回true
  • uri.isOpaque ()将返回false

我发现这个博客很方便:Exploring Java's Network API: URIs and URLs

答案 1 :(得分:3)

看看java.net.URL。它有完全符合您要求的方法。

主机名:getHost()
查询字符串:getQuery()
片段/参考/锚:getRef()
路径:getPath()

答案 2 :(得分:2)

java.net.URIjava.net.URL不适用于许多现代网址。 java.net.URI遵守RFC 2396,这是一个非常古老的标准。 java.net.URL有时会做得很好,但是如果您正在使用野外发现的网址,那么在很多情况下都会失败。

为了解决这些问题,我写了galimatias,一个用于Java的URL解析和规范化库。它几乎可以与您想象的任何URL一起使用(基本上,如果它在Web浏览器中工作,则galimatias将正确解析它)。它有非常方便的API。

您可以访问:https://github.com/smola/galimatias

答案 3 :(得分:0)

查看URL class的getter方法。

你有你需要的一切。

答案 4 :(得分:0)

URL.getProtocol()
URL.getHost()
URL.getPort()

等等。