Previous | Next | Trail Map | Custom Networking and Security | URL を扱う


URL を作成する

URL オブジェクトを作成する最も簡単な方法は、URL アドレスの "人が読んで意味が わかる" 書式を表す文字列をもとに作成することである。これは一般に、別の人が URL について述べるときに使用する書式である。たとえば、Java 対応のサイトのリ ストをもつ Gamelan サイトを示すときは、次のような書式になる。

http://www.gamelan.com/ 

Java プログラムでは、上記のテキストをもたせた文字列を使って、URL オブジェク トを作成することができる。

URL gamelan = new URL("http://www.gamelan.com/");

上記で作成された URL オブジェクトは絶対パスの URL を表す。 絶対パスの URL には当該の資源へ到達するのに必要な情報がすべて納められている 。URL オブジェクトは相対パスの URL のアドレスから作成することもでき る。

別の URL に相対的に位置する URL を作成する

相対パスの URL には別の URL に相対的に位置する (または別の URL のコンテキス トにある) 資源へ到達するのに足りる情報だけが納められている。

相対パスの URL 指定は HTML ファイル内でしばしば使用される。 たとえば、読者が JoesHomePage.html という名前の HTML ファイルを作成するとする。 このページ内で、JoesHomePage.html と同じマシンの同じディレクト リにある別のページ、PicturesOfMe.htmlMyKids.html へリンクするとする場合、 JoesHomePage.html からの PicturesOfMe.htmlMyKids.html へのリンクは、次のように、ファイル名だけで指定でき る。

<a href="PicturesOfMe.html">Pictures of Me</a>
<a href="MyKids.html">Pictures of My Kids</a>

これらの URL アドレスは相対パスの URL である。つまり、納められてい るファイル、JoesHomePage.html への相対位置で URL が指定されてい るのである。

Java プログラムでは、相対パスの URL 指定をもとに URL オブジェクトを作成する ことができる。たとえば、読者が自分のプログラムで "http://www.gamelan.com/" の URL をすでに作成していて、そのサイトにあるいくつかのファイルの名前 (Gamelan.network.htmlGamelan.animation.html) がわかっているとする。この場合、初めの Gamelan URL のコンテキストでファイル 名を指定するだけで、Gamelan サイトの各ファイルの URL を作成することができる 。 ファイル名が相対パスの URL であり、初めの Gamelan URL との相対位置でとらえら れる。

URL gamelan = new URL("http://www.gamelan.com/");
URL gamelanNetwork = new URL(gamelan, "Gamelan.network.html");

このコード片は、URL オブジェクト (ベース) と相対パスの URL をもとに URL オブ ジェクトを作成できる、URL クラスのコンストラクタを使用している。

このコンストラクタは、ファイル内で名前の付けられているアンカー (リファレ ンス とも呼ばれる) への URL を作成するときにも便利である。たとえば、 "Gamelan.network.html" ファイルの末尾に BOTTOM という名前のアン カーがあるとする。この場合、次のように相対パスの URL コンストラクタを使用し て URL を作成することができる。

URL gamelanNetworkBottom = new URL(gamelanNetwork, "#BOTTOM");

この URL コンストラクタの一般的な書式は次のとおりである。

URL(URL baseURL, String relativeURL)

最初の引数は新規の URL のベースを指定する URL オブジェクトである。2 番目の引 数はベースへの相対位置から資源名の残りを指定する文字列である。 baseURL が null の場合は、このコンストラクタは relativeURL の部分を絶対パスの URL 指定として扱う。 逆に、relativeURL が絶対パスの URL 指定の場合は、コンストラクタは baseURL を無視する。

その他の URL コンストラクタ

URL クラスには URL オブジェクトを作成するためのコンストラクタがあと 2 つ追加 されている。これらのコンストラクタは、URL の資源名の部分にホスト名や、ファイ ル名、ポート番号、リファレンスの構成要素をもつ、HTTP URL のような URL を扱う ときに便利である。 また、完全な URL 指定のための文字列は不明だが、URL のさまざまな構成要素は わかっている場合にも有効である。

たとえば、ファイル表示パネルに似せて、ユーザがマウスを使ってプロトコル、ホス ト名、ポート番号、ファイル名を選択するネットワーク表示パネルを作成する 場合、その構成要素をもとに URL を作成することができる。追加のコンストラクタ の 1 つがプロトコル、ホスト名、ファイル名をもとに URL を作成する。次に示すコ ード片は、Gamelanサイトにある Gamelan.network.html ファイルの URL を作成している。

URL gamelan = new URL("http", "www.gamelan.com", 
"/Gamelan.network.html");

これは URL("http://www.gamelan.com/Gamelan.network.html") と等 価である。 最初の引数はプロトコル、2 番目の引数ホスト名、最後の引数はファイルのパス名で ある。 ファイル名の先頭にスラッシュ (/) 文字があることに注意する。 これはそのファイル名がホストのルートから指定されていることを表している。

最後の URL コンストラクタは前のコンストラクタで使用された引数のリストにポー ト番号を追加する。

URL gamelan = new URL("http", "www.gamelan.com", 80, 
"/Gamelan.network.html");

これは次に示す URL の URL オブジェクトを作成している。

http://www.gamelan.com:80/Gamelan.network.html

これまでに述べたコンストラクタの 1 つを使って URL を作成する場合、URL の toString() メソッドまたは同等の toExternalForm() メソッドにより、完成した URL アドレスをもつ文字列を得ることができる。

MalformedURLException

4 つの URL コンストラクタのどれでも、引数が null や不明のプロトコルを参照した場合は、MalformedURLException をあげる。 一般に、この例外はキャッチして処理する必要がある。 したがって、URL コンストラクタ文には try/catch の対を組み込んでおくのが普通 である。

try {
    URL myURL = new URL(. . .)
} catch (MalformedURLException e) {
    . . .
    // 例外ハンドラのコードをここに記述する
    . . .
}

例外処理については、例外を使って エラーを処理する(in the 
Writing Java Programs trail)を参照する。


注: URL は "1 回しか書き込めない" オブジェクトである。URL オブジェクトをいったん 作成した後は、その属性 (プロトコル、ホスト名、ファイル名、ポート番号) をいっ さい変更することができない。


Previous | Next | Trail Map | Custom Networking and Security | URL を扱う