ホームページ >Java >&#&チュートリアル >Java で URL からドメイン名を確実に抽出する方法

Java で URL からドメイン名を確実に抽出する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 04:21:31815ブラウズ

How to Reliably Extract Domain Names from URLs in Java?

URL からのドメイン名の抽出

URL からのドメイン名の抽出は、Web 開発およびプログラミングにおける一般的なタスクです。このタスクにはいくつかのアプローチがありますが、最も簡単で堅牢な方法は、java.net.URI クラスを使用することです。

オリジナルの Java コード

提供された Javaコードは java.net.URL クラスを使用してドメイン名を抽出します。このアプローチはほとんどの場合に機能しますが、制限と潜在的な欠点があります。

元のコードの制限:

  • URL が次で始まることを前提としています。 「http」または「https」ですが、常に当てはまるわけではありません (相対 URL など)。
  • equals メソッドを使用して URL を比較するときに DNS ルックアップを実行するため、サービス拒否に対して脆弱になります。

URI を使用した代替アプローチ

推奨されるアプローチは、標準化された信頼性の高い解析方法を提供する java.net.URI クラスを使用することです。そしてURLを操作します。次のコード スニペットは、このアプローチを示しています。

<code class="java">public static String getDomainName(String url) throws URISyntaxException {
    URI uri = new URI(url);
    String domain = uri.getHost();
    return domain.startsWith("www.") ? domain.substring(4) : domain;
}</code>

このコードは、まず new URI(url) コンストラクターを使用して URL を URI オブジェクトに解析します。次に、getHost() メソッドを使用してドメイン名を取得し、URI のホスト コンポーネントを返します。ホストコンポーネントが「www.」で始まる場合、「.www」プレフィックスは部分文字列メソッドを使用して削除されます。

考慮すべきエッジケース

改良されたURI ベースのアプローチでも、一部のエッジ ケースでは依然として問題が発生する可能性があります:

  • 相対パスを含む URL (例: "httpfoo/bar")
  • 大文字と小文字を区別しないプロトコル (例: "HTTP ://example.com/")
  • プロトコル相対 URL (例: "//example.com/")
  • パスコンポーネントが「www」で始まる相対 URL (例: "www/foo")

これらのエッジ ケースを処理するには、RFC 3986 付録 B で提供されている正規表現など、より包括的な解析メカニズムが必要になる場合があります。

以上がJava で URL からドメイン名を確実に抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。