URLとプロトコル


URLの作成

URL(Uniform Resource Locator) は、Web 上のリソースを指すポインタです
URL を利用した通信は Java ネットワークにおいて最も簡単な
ネットワーク上のリソース取得手段です

ただし、URL からリソースを取得する場合 Java が
指定したプロトコルに対応している必要があり、これはプラットフォームで異なり
通信手段として保障されるのは http と ftp プロトコルだけです
実行環境によっては telnet や mailto などもサポートされています

URL は5つの要素で構成されています
これらの要素は、次のように記述されています

プロトコル(スキーマ)://オーソリティ/パス?問い合わせ文字列#リファレンス

ただし、URL が必ずこれらの要素を保有しているとは限りません
一般的な http://java.sun.com/ というのは、プロトコルとオーソリティのみです
オーソリティは、さらに次のように分解することができます

ユーザー情報@ホスト名:ポート番号

URL は java.net.URL クラスで表されます
このクラスは、次のように定義されています

public final class URL extends Object implements Serializable

このクラスは、次のようなコンストラクタを公開しています
public URL(String spec) throws MalformedURLException

public URL(URL context , String spec)
		throws MalformedURLException

public URL(URL context , String spec ,
	URLStreamHandler handler) throws MalformedURLException

public URL(String protocol , String host ,
	int port , String file) throws MalformedURLException

public URL(String protocol , String host ,
	String file) throws MalformedURLException

public URL(String protocol ,
	String host , int port , String file ,
	URLStreamHandler handler) throws MalformedURLException
spec には URL として解析される文字列を指定します
context には、spec の基本 URL クラスを指定します
context が指定されていない(または null の) 場合は、spec は絶対 URL を
基本 URL が指定されている場合は相対 URL を指定します

handler には、URL ストリームハンドラというものを指定します
これは、仮想マシンでサポートされていないプロトコルを処理する時などに使えますが
セキュリティの問題もあり、セキュリティホールとなる可能性があるため
要求したとしても、許可されるとは限りません

URL ストリームハンドラについては本章では触れません
これについては、後ほど詳しく紹介したいと思います

protcol には使用するプロトコル名(例えば "http")を
host にはホスト名、port にはポート番号を
file はホスト上のファイル名をそれぞれ指定します
ポートを省略する場合は、常にデフォルト(http ならば 80)が使われます

URL クラスは InetAddress クラスとは異なり
インスタンス生成時にネットワークに接続するようなことは行いません
MalformedURLException は指定した URL を示す文字列などが
URL の形式と異なっている場合に発生します

正しく生成された URL のインスタンスは、自分が指している URL の
プロトコルやファイル、ホスト名などの情報を分離して提供することができます
プロトコルは URL.getProtocol() を、ホスト名は URL.getHost()
ポート番号は URL.getPort()、ファイル名は URL.getFile()
リファレンスは URL.getRef() メソッドを用いて取得します

public String getProtocol()
public String getHost()
public int getPort()
public String getFile()
public String getRef()

これらのメソッドを用いれば、URL を各要素に分解できます
import java.net.*;

public class Test {
	public static void main(String[] args) {
		try {
			URL url = new URL(args[0]);
			System.out.println("スキーマ : " + url.getProtocol());
			System.out.println("ホスト : " + url.getHost());
			System.out.println("ポート : " + url.getPort());
			System.out.println("パス : " + url.getFile());
			System.out.println("リファレンス : " + url.getRef());
		}
		catch(Exception e) {
			System.err.println(e);
			return;
		}
	}
}
このプログラムは、コマンドライン引数から受けた URL を解析し
プロトコルやホスト名、ポートなどを標準出力に表示します




前のページへ戻る次のページへ