public final class URL extends Object implements Serializable
URL
クラスは、Uniform Resource Locator (ユニフォーム・リソース・ロケータ)、つまりWorld Wide Web上の「リソース」へのポインタを表します。リソースは、ファイルやディレクトリのような単純なものであることも、データベースや検索エンジンに対するクエリーなど、より複雑なオブジェクトへの参照であることもあります。URLの種類や形式の詳細については、次を参照してください。 Types of URL
一般に、URLはいくつかの部分に分解できます。次に例を示します。
http://www.example.com/docs/resource1.html
上記のURLは、使用すべきプロトコルがhttp
(HyperText Transfer Protocol)であることと、www.example.com
という名前のホスト・マシン上に情報が存在していることを示しています。そのホスト・マシン上の情報には、/docs/resource1.html
という名前が付けられています。ホスト・マシン上におけるこの名前の正確な意味は、プロトコルとホストの両方に依存します。一般的には情報はファイル内に保存されていますが、動的に生成される場合もあります。URLのこうした部分はパスコンポーネントと呼ばれます。
URLにはオプションで「ポート」を指定できます。これは、TCP接続の確立先となる、リモート・ホスト・マシン上のポート番号です。ポートを指定しなかった場合は、代わりにプロトコルのデフォルト・ポートが使用されます。たとえば、http
のデフォルト・ポートは80
です。次のように別のポートを指定することもできます。
http://www.example.com:1080/docs/resource1.html
URL
の構文は、「RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax」で定義され、「RFC 2732: Format for Literal IPv6 Addresses in URLs」で修正されています。リテラルIPv6アドレス形式ではスコープIDもサポートされます。スコープIDの構文や使用方法については、ここを参照してください。
URLには「フラグメント」(「ref」または「参照(reference)」とも呼ぶ)を追加できます。フラグメントは、シャープ記号文字「#」とそれに続くいくつかの文字によって示されます。次に例を示します。
http://java.sun.com/index.html#chapter1
本来は、このフラグメントはURLの一部ではありません。たとえば、上に示したフラグメントは、指定されたリソースを取得したあと、そのドキュメントの中でchapter1
というタグが付いている部分をアプリケーションによる処理の対象とすることを示します。タグの意味はリソースによって異なります。
アプリケーションは「相対URL」を指定することもできます。このURLには、別のURLを基準としてリソースを検索するのに必要な情報しか含まれていません。相対URLはHTMLページ内でよく使用されます。たとえば、次のURLがあるとします。
このHTMLページの中に次の相対URLが含まれているとします。http://java.sun.com/index.html
これは次のURLの短縮形と見なされます。FAQ.html
http://java.sun.com/FAQ.html
相対URLでは、URLのすべてのコンポーネントを指定する必要はありません。プロトコルやホスト名、ポート番号を省略した場合には、すべてのコンポーネントが指定されているURLから値が継承されます。ファイル・コンポーネントは指定しなければいけません。オプション指定のフラグメントは継承されません。
URLクラス自体がRFC2396に定義されたエスケープ・メカニズムに従ってURLコンポーネントのエンコードやデコードを行うことはありません。URLの呼出し前にエスケープの必要なすべてのフィールドをエンコードしておくことは、呼出し元の責任です。URLから返されたすべてのエスケープ済みフィールドをデコードすることも、同様です。さらに、URLは、URLエスケープの知識を持たないため、同じURLのエンコードされた形式とデコードされた形式の等価性を判断できません。たとえば、次の2つのURLがあるとします。
http://foo.com/hello world/ and http://foo.com/hello%20worldこれらは、互いに等しくないと見なされます。
URI
クラスは特定の状況において、そのコンポーネント・フィールドに対してエスケープ処理を実行することに注意してください。URLのエンコードとデコードを管理する際の推奨の方法は、URI
を使用して、これら2つのクラス間の変換をtoURI()
とURI.toURL()
を使って行うことです。
URLEncoder
クラスとURLDecoder
クラスを使用することもできますが、これらはHTML形式のエンコーディング専用です。また、このエンコーディングは、RFC2396で定義されているエンコーディング方式と同じものではありません。
コンストラクタと説明 |
---|
URL(String spec)
String 表現からURL オブジェクトを生成します。 |
URL(String protocol, String host, int port, String file)
指定された
protocol 、host 、port 番号、およびfile から、URL オブジェクトを作成します。 |
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
指定された
protocol 、host 、port 番号、file 、およびhandler から、URL オブジェクトを作成します。 |
URL(String protocol, String host, String file)
指定された
protocol 名、host 名、およびfile 名からURLを作成します。 |
URL(URL context, String spec)
指定されたコンテキスト内の指定された仕様で構文解析することによって、URLを生成します。
|
URL(URL context, String spec, URLStreamHandler handler)
指定されたコンテキスト内の指定されたハンドラで、指定された仕様を構文解析してURLを生成します。
|
修飾子と型 | メソッドと説明 |
---|---|
boolean |
equals(Object obj)
このURLと別のオブジェクトとが等しいかどうかを比較します。
|
String |
getAuthority()
この
URL の機関部分を取得します。 |
Object |
getContent()
このURLのコンテンツを取得します。
|
Object |
getContent(Class[] classes)
このURLのコンテンツを取得します。
|
int |
getDefaultPort()
この
URL に関連するプロトコルのデフォルトのポート番号を取得します。 |
String |
getFile()
この
URL のファイル名を取得します。 |
String |
getHost()
該当する場合、この
URL のホスト名を取得します。 |
String |
getPath()
この
URL のパス部分を取得します。 |
int |
getPort()
この
URL のポート番号を取得します。 |
String |
getProtocol()
この
URL のプロトコル名を取得します。 |
String |
getQuery()
この
URL のクエリー部分を取得します。 |
String |
getRef()
この
URL のアンカー(「参照」とも呼ばれる)を取得します。 |
String |
getUserInfo()
この
URL のユーザー情報部分を取得します。 |
int |
hashCode()
ハッシュ表のインデックス付けに適したint値を作成します。
|
URLConnection |
openConnection()
URL が参照するリモート・オブジェクトへの接続を表すURLConnection インスタンスを返します。 |
URLConnection |
openConnection(Proxy proxy)
openConnection() とほぼ同じですが、接続の確立が指定されたプロキシ経由で行われる点が異なります。プロキシ処理をサポートしないプロトコル・ハンドラは、プロキシのパラメータを無視し、通常の接続を確立します。 |
InputStream |
openStream()
この
URL への接続を開き、その接続から読み込むためのInputStream を返します。 |
boolean |
sameFile(URL other)
フラグメント・コンポーネント以外の2つのURLを比較します。
|
static void |
setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
アプリケーションの
URLStreamHandlerFactory を設定します。 |
String |
toExternalForm()
この
URL の文字列表現を構築します。 |
String |
toString()
この
URL の文字列表現を構築します。 |
URI |
toURI()
このURLと等価な
URI を返します。 |
public URL(String protocol, String host, int port, String file) throws MalformedURLException
protocol
、host
、port
番号、およびfile
から、URL
オブジェクトを作成します。
host
は、ホスト名、リテラルIPアドレスのいずれかとして表現できます。IPv6リテラル・アドレスを使用する場合は、RFC 2732で指定されているように、アドレスを角カッコ(「[」
と「]」
)で囲む必要があります。ただし、「RFC 2373: IP Version 6 Addressing Architecture」で定義されているリテラルIPv6アドレス形式も、使用可能です。
port
番号-1
の指定は、URLがプロトコルのデフォルトのポートを使用することを示します。
指定されたプロトコルで最初にURLオブジェクトを生成するときには、そのプロトコルのためのストリーム・プロトコル・ハンドラオブジェクトが生成されます。このストリーム・プロトコル・ハンドラ・オブジェクトは、URLStreamHandler
クラスのインスタンスです。
URLStreamHandlerFactory
のインスタンスをストリーム・ハンドラ・ファクトリとして設定している場合は、そのインスタンスのcreateURLStreamHandler
メソッドがプロトコル文字列を引数として呼び出されて、ストリーム・プロトコル・ハンドラを作成する。
URLStreamHandlerFactory
が設定されていない場合、あるいはファクトリのcreateURLStreamHandler
メソッドがnull
を返した場合は、コンストラクタが次のシステム・プロパティの値を探す。
このシステム・プロパティの値がjava.protocol.handler.pkgs
null
でなければ、値は、垂直スラッシュ文字「|
」で区切られた、パッケージのリストとして解釈される。コンストラクタは次の名前を持つクラスをロードしようとする。
ここで、<package>にはパッケージの名前が入り、<protocol>にはプロトコルの名前が入る。このクラスが存在しない場合、あるいはクラスは存在してもそれが<package>.<protocol>.Handler
URLStreamHandler
のサブクラスではない場合には、リストにある次のパッケージを試すことになる。
このクラスが存在しない場合、またはクラスは存在するが<system default package>.<protocol>.Handler
URLStreamHandler
のサブクラスではない場合は、MalformedURLException
がスローされる。
次のプロトコルのプロトコル・ハンドラは、検索パス上に存在することが保証されています。
その他のプロトコルのプロトコル・ハンドラも使用可能になっている可能性があります。http, https, file, and jar
このコンストラクタによる入力の検証は実行されません。
protocol
- 使用するプロトコル名。host
- ホスト名。port
- ホスト上でのポート番号。file
- ホスト上のファイルMalformedURLException
- 不明なプロトコルが指定された場合。System.getProperty(java.lang.String)
, setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory)
, URLStreamHandler
, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
public URL(String protocol, String host, String file) throws MalformedURLException
protocol
名、host
名、およびfile
名からURLを作成します。指定されたプロトコルのデフォルト・ポートが使用されます。
このメソッドの機能は、引数にprotocol
、host
、-1
、file
を指定して4つの引数を受け取るコンストラクタを呼び出すのと同じです。このコンストラクタによる入力の検証は実行されません。
protocol
- 使用するプロトコル名。host
- ホスト名。file
- ホスト上のファイル。MalformedURLException
- 不明なプロトコルが指定された場合。URL(java.lang.String, java.lang.String, int, java.lang.String)
public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
protocol
、host
、port
番号、file
、およびhandler
から、URL
オブジェクトを作成します。port
番号-1
の指定は、URLがプロトコルのデフォルトのポートを使用することを示します。handler
にnull
を指定した場合、それは、java.net.URL#URL(java.lang.String, java.lang.String, int, java.lang.String)で概説したプロトコルのデフォルト・ストリーム・ハンドラを、URLが使用すべきであることを示します。
ハンドラがnullではなく、セキュリティ・マネージャが存在する場合、NetPermission("specifyStreamHandler")
アクセス権を指定してセキュリティ・マネージャのcheckPermission
メソッドが呼び出されます。その結果、SecurityExceptionが発生することがあります。このコンストラクタによる入力の検証は実行されません。
protocol
- 使用するプロトコル名。host
- ホスト名。port
- ホスト上でのポート番号。file
- ホスト上のファイルhandler
- URLのストリーム・ハンドラ。MalformedURLException
- 不明なプロトコルが指定された場合。SecurityException
−セキュリティ・マネージャが存在し、セキュリティ・マネージャのcheckPermission
メソッドがストリーム・ハンドラの明示的な指定を許可しない場合。System.getProperty(java.lang.String)
, setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory)
, URLStreamHandler
, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)
, SecurityManager.checkPermission(java.security.Permission)
, NetPermission
public URL(String spec) throws MalformedURLException
String
表現からURL
オブジェクトを生成します。
このコンストラクタは、1番目の引数にnull
を指定して、引数が2つのコンストラクタを呼び出すことと同じです。
spec
- URLとして構文解析されるString
。MalformedURLException
- プロトコルが指定されていないか、不明なプロトコルが見つかったか、spec
がnull
の場合。URL(java.net.URL, java.lang.String)
public URL(URL context, String spec) throws MalformedURLException
参照はスキーム、機関、パス、クエリー、およびフラグメントの各部分に構文解析されます。パス・コンポーネントが空でスキーム、機関、およびクエリーの各コンポーネントが未定義の場合、新しいURLが現在のドキュメントへの参照となります。それ以外の場合は、仕様のフラグメント部分とクエリー部分が新しいURLに使われます。<scheme>://<authority><path>?<query>#<fragment>
指定された仕様でスキーム・コンポーネントが定義され、そのスキーム・コンポーネントがコンテキストのスキームと一致しない場合、仕様だけに基づく絶対URLとして新しいURLが生成されます。そうでない場合は、スキーム・コンポーネントはコンテキストURLを継承します。
機関コンポーネントが仕様にある場合には、仕様は絶対的なものとして扱われ、仕様の機関とパスはコンテキストの機関とパスを置換します。仕様に機関コンポーネントがない場合、新しいURLの機関はコンテキストを継承します。
仕様のパス・コンポーネントがスラッシュ文字「/」で始まる場合、パスは絶対的なものとして扱われ、仕様のパスがコンテキストのパスを置換します。
それ以外の場合、RFC2396で説明されているように、パスは相対パスとして扱われ、コンテキスト・パスに追加されます。また、この場合、「..」および「.」によって行われたディレクトリ変更を削除することで、パスは正規化されます。
URL構文解析の詳細な説明については、RFC2396を参照してください。
context
- 仕様を構文解析するコンテキスト。spec
- URLとして構文解析されるString
。MalformedURLException
- プロトコルが指定されていないか、不明なプロトコルが見つかったか、spec
がnull
の場合。URL(java.lang.String, java.lang.String, int, java.lang.String)
, URLStreamHandler
、URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
context
- 仕様を構文解析するコンテキスト。spec
- URLとして構文解析されるString
。handler
- URLのストリーム・ハンドラ。MalformedURLException
- プロトコルが指定されていないか、不明なプロトコルが見つかったか、spec
がnull
の場合。SecurityException
−セキュリティ・マネージャが存在し、セキュリティ・マネージャのcheckPermission
メソッドがストリーム・ハンドラの指定を許可しない場合。URL(java.lang.String, java.lang.String, int, java.lang.String)
, URLStreamHandler
、URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
public String getQuery()
URL
のクエリー部分を取得します。URL
のクエリー部分。存在しない場合はnull
public String getPath()
URL
のパス部分を取得します。URL
のパス部分。存在しない場合は空の文字列public String getUserInfo()
URL
のユーザー情報部分を取得します。URL
のユーザー情報部分。存在しない場合はnull
public String getAuthority()
URL
の機関部分を取得します。URL
の機関部分public int getPort()
URL
のポート番号を取得します。public int getDefaultPort()
URL
に関連するプロトコルのデフォルトのポート番号を取得します。URLスキームまたはURLのURLStreamHandlerがデフォルトのポート番号を定義しない場合は、-1が返されます。public String getProtocol()
URL
のプロトコル名を取得します。URL
のプロトコル。public String getHost()
URL
のホスト名を取得します。ホスト名の形式はRFC 2732に準拠します。つまり、リテラルIPv6アドレスの場合、このメソッドは角カッコ(「[」
および「]」
)で囲まれたIPv6アドレスを返します。URL
のホスト名。public String getFile()
URL
のファイル名を取得します。返されるファイル部分は、getQuery()
の値が存在する場合には、その値とgetPath()
の値を連結したものと同じになります。クエリー部分が存在しない場合、このメソッドとgetPath()
は同じ結果を返します。URL
のファイル名。存在しない場合は空の文字列public String getRef()
URL
のアンカー(「参照」とも呼ばれる)を取得します。URL
のアンカー(「参照」とも呼ばれる)。存在しない場合はnull
public boolean equals(Object obj)
指定されたオブジェクトがURLでない場合、このメソッドは直ちにfalse
を返します。
2つのURLオブジェクトが等しいのは、同じプロトコルを持ち、同じホストを参照し、ホスト上のポート番号が同じで、ファイルとファイルのフラグメントが同じ場合です。
2つのホストが等価と見なされるのは、両方のホスト名が同じIPアドレスに解決されるか、どちらかのホスト名を解決できない場合は、大文字小文字に関係なくホスト名が等しいか、両方のホスト名がnullに等しい場合です。
ホスト比較には名前解決が必要なので、この操作はブロック操作です。
注: equals
の定義された動作は、HTTPの仮想ホストと一致しないことが知られています。
equals
、クラス: Object
obj
−比較対象のURL。true
、そうでない場合はfalse
。Object.hashCode()
, HashMap
public int hashCode()
ハッシュ・コードはURL比較に関連するすべてのURLコンポーネントに基づいています。したがって、この操作はブロック操作です。
hashCode
、クラス: Object
URL
のハッシュ・コード。Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
public boolean sameFile(URL other)
フラグメント・コンポーネントを考慮しないで、このURL
とother
引数が等しい場合は、true
を返します。
other
- 比較対象のURL
。true
、そうでない場合はfalse
。public String toString()
URL
の文字列表現を構築します。このオブジェクトのストリーム・プロトコル・ハンドラのtoExternalForm
メソッドを呼び出すことによって文字列が作成されます。toString
、クラス: Object
URL(java.lang.String, java.lang.String, int, java.lang.String)
, URLStreamHandler.toExternalForm(java.net.URL)
public String toExternalForm()
URL
の文字列表現を構築します。このオブジェクトのストリーム・プロトコル・ハンドラのtoExternalForm
メソッドを呼び出すことによって文字列が作成されます。URL(java.lang.String, java.lang.String, int, java.lang.String)
, URLStreamHandler.toExternalForm(java.net.URL)
public URI toURI() throws URISyntaxException
URI
を返します。このメソッドは、new URI (this.toString())
と同じように機能します。
RFC 2396に準拠したURLインスタンスは必ずURIに変換できることに注意してください。ただし、厳密に準拠していないURLは、URIに変換できない可能性があります。
URISyntaxException
−このURLの形式がRFC2396に厳密に従っていないため、URIに変換できない場合。public URLConnection openConnection() throws IOException
URL
が参照するリモート・オブジェクトへの接続を表すURLConnection
インスタンスを返します。
このURLのプロトコル・ハンドラのURLStreamHandler.openConnection(URL)メソッドを呼び出すたびに、URLConnectionの新しいインスタンスが作成されます。
URLConnectionインスタンスは作成時に実際のネットワーク接続を確立しないことに注意してください。これが発生するのは、URLConnection.connect()の呼出し時のみです。
HTTPやJARといったURLのプロトコルごとに一般または特殊なURLConnectionサブクラスが存在しており、そのサブクラスは次のパッケージまたはそのサブパッケージのいずれかに属します。java.lang、java.io、java.util, java.net。返される接続の型は、そのサブクラスになります。たとえば、HTTPの場合はHttpURLConnectionが返され、JARの場合はJarURLConnectionが返されます。
URLConnection
。IOException
- 入出力例外が発生した場合。URL(java.lang.String, java.lang.String, int, java.lang.String)
public URLConnection openConnection(Proxy proxy) throws IOException
openConnection()
とほぼ同じですが、接続の確立が指定されたプロキシ経由で行われる点が異なります。プロキシ処理をサポートしないプロトコル・ハンドラは、プロキシのパラメータを無視し、通常の接続を確立します。このメソッドを呼び出すと、システムのデフォルトのProxySelector設定が横取りされます。proxy
−この接続の確立に使用されるプロキシ。直接接続を行いたい場合はProxy.NO_PROXYを指定すべきである。URLConnection
。IOException
- 入出力例外が発生した場合。SecurityException
−セキュリティ・マネージャが存在し、プロキシに接続する権限を呼出し元が持っていない場合。IllegalArgumentException
−プロキシがnullであるかプロキシの型が正しくない場合にスローされるUnsupportedOperationException
−プロトコル・ハンドラを実装するサブクラスがこのメソッドをサポートしない場合。URL(java.lang.String, java.lang.String, int, java.lang.String)
, URLConnection
、URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)
public final InputStream openStream() throws IOException
URL
への接続を開き、その接続から読み込むためのInputStream
を返します。このメソッドは次のメソッドの短縮形です。
openConnection().getInputStream()
IOException
- 入出力例外が発生した場合。openConnection()
, URLConnection.getInputStream()
public final Object getContent() throws IOException
openConnection().getContent()
IOException
- 入出力例外が発生した場合。URLConnection.getContent()
public final Object getContent(Class[] classes) throws IOException
openConnection().getContent(Class[])
classes
−Java型の配列IOException
- 入出力例外が発生した場合。URLConnection.getContent(Class[])
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
URLStreamHandlerFactory
を設定します。このメソッドは、使用するJava仮想マシンで1回しか呼び出せません。
URLStreamHandlerFactory
インスタンスは、プロトコル名からストリーム・プロトコル・ハンドラを構築するのに使用されます。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、このメソッドは最初にセキュリティ・マネージャのcheckSetFactory
メソッドを呼び出します。この結果、SecurityExceptionがスローされることがあります。
fac
- 目的のファクトリ。Error
−アプリケーションでファクトリがすでに設定されている場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckSetFactory
メソッドでこの操作が許可されていない場合。URL(java.lang.String, java.lang.String, int, java.lang.String)
, URLStreamHandlerFactory
, SecurityManager.checkSetFactory()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.