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

san*_*ity 6 java

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

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

小智 9

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

<scheme>://<userinfo>@<host>:<port><path>#<fragement>
Run Code Online (Sandbox Code Playgroud)

这里有一个例子:

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

以下将发生:

  • 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

我发现这个博客很方便:探索Java的网络API:URI和URL


smo*_*ola 5

java.net.URI并且java.net.URL不适用于许多现代 URL。java.net.URI遵循 RFC 2396,这是一个非常古老的标准。java.net.URL有时效果很好,但如果您使用的是野外发现的 URL,则在很多情况下都会失败。

为了解决这些问题,我编写了galimatias,一个 Java 的 URL 解析和规范化库。它几乎可以处理任何你能想象到的 URL(基本上,如果它在网络浏览器中工作,galimatias 会正确解析它)。并且它有非常方便的API。

您可以在以下网址获取: https: //github.com/smola/galimatias


Pau*_*aul 4

看一下java.net.URL。它有适合您想要做的事情的方法。

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