【问题标题】:How to parse URL if protocol is not http or https?如果协议不是 http 或 https,如何解析 URL?
【发布时间】:2015-10-26 10:35:21
【问题描述】:

我的问题是如何解析协议不同的url?

String str = "olqmeeting://192.168.43.55/uam/meeting/meeting.php?id=A72U5AF9";
URL url = new URL(str);

【问题讨论】:

  • “解析 URL”是什么意思?如果没有知道如何处理olqmeeting 协议的URLStreamHandler,您将得到一个未知协议的MalformedURLException
  • 它的工作:URI url = new URI("olqmeeting"+"://"+serverName+"/uam/meeting/meeting.php?type="+type); System.out.println("方案:"+url.getScheme()); System.out.println("主机名:"+url.getHost())

标签: java url


【解决方案1】:

您可以使用 URI 类来解析这些 URL。它会起作用……尽管您仅限于对 URL 本身的操作,而不是对它所引用的资源的操作。 (详情请参阅URIjavadoc。)

如果你想让URL 工作(并且能够“连接”到资源),那么你需要实现和配置一个URLStreamHandlerFactory,它(至少)理解 URL 的协议以及如何处理它。

(如果您在创建URL 对象时没有显式提供非空URLStreamHandlerFactory,则构造函数将尝试为URL 的协议查找默认值。如果它不能这样做,您获取MalformedURLException。)

【讨论】:

    【解决方案2】:

    URL 有其他构造函数,您可以在其中定义协议

    URL(String protocol, String host, int port, String file)
    Creates a URL object from the specified protocol, host, port number, and file.
    URL(String protocol, String host, int port, String file, URLStreamHandler handler)
    Creates a URL object from the specified protocol, host, port number, file, and handler.
    URL(String protocol, String host, String file)
    Creates a URL from the specified protocol name, host name, and file name.
    

    最终你甚至可以使用.set() 方法,但它是受保护的,所以你需要实现一个新的自定义 URL 类

    【讨论】:

    • 当试图解析以获取主机名并获取协议时,它会为未知协议提供 MalformedURLException。我可以制作自定义协议吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多