Java URL 処理

URL(Uniform Resource Locator)は中国語で「统一资源定位符(統一資源位置指定子)」と呼ばれ、俗に「ウェブアドレス」とも呼ばれます。インターネット上のリソース(ウェブページやFTPアドレスなど)を表します。

この章では、JavaがURLをどのように処理するかを紹介します。URLは次のいくつかの部分に分けられます。

protocol://host:port/path?query#fragment

プロトコル(protocol)は HTTP、HTTPS、FTP、File の場合があり、port はポート番号、path はファイルパスとファイル名です。

HTTPプロトコルのURLの例は次のとおりです:

http://www.example.com/index.html?language=cn#j2se

URLの解析:

  • プロトコル(protocol):http
  • ホスト(host:port)::www.example.com
  • ポート番号(port):80。上記のURL例ではポートを指定していません。HTTPプロトコルのデフォルトのポート番号が80だからです。
  • ファイルパス(path):/index.html
  • リクエストパラメータ(query)::language=cn
  • フラグメント(fragment):j2se。ウェブページ内のid属性がj2seであるHTML要素の位置を指します。

URL クラスメソッド

java.netパッケージにはURLクラスが定義されており、このクラスはURLに関する内容を処理するために使われます。URLクラスの作成と使用について、以下でそれぞれ紹介します。

java.net.URLは豊富なURL構築方法を提供し、java.net.URLを通じてリソースを取得できます。

番号メソッドの説明
1public URL(String protocol, String host, int port, String file) throws MalformedURLException.
指定されたパラメータ(プロトコル、ホスト名、ポート番号、ファイル名)でURLを作成します。
2public URL(String protocol, String host, String file) throws MalformedURLException
指定されたプロトコル、ホスト名、ファイル名でURLを作成し、ポートはプロトコルのデフォルトポートを使用します。
3public URL(String url) throws MalformedURLException
指定されたURL文字列でURLを作成します。
4public URL(URL context, String url) throws MalformedURLException
ベースアドレスと相対URLを使用して作成します。

URLクラスにはURLの各部分にアクセスするための多くのメソッドが含まれています。具体的なメソッドと説明は次のとおりです:

番号メソッドの説明
1public String getPath()
URLのパス部分を返します。
2public String getQuery()
URLのクエリ部分を返します。
3public String getAuthority()
このURLの認可部分を取得します。
4public int getPort()
URLのポート部分を返します。
5public int getDefaultPort()
プロトコルのデフォルトポート番号を返します。
6public String getProtocol()
URLのプロトコルを返します。
7public String getHost()
URLのホストを返します。
8public String getFile()
URLのファイル名部分を返します。
9public String getRef()
このURLのアンカー(「リファレンス」とも呼ばれる)を取得します。
10public URLConnection openConnection() throws IOException
URL接続を開き、クライアントを実行してリソースにアクセスします。

インスタンス

上記のインスタンスは、java.netのURLクラスを使用してURLの各部分のパラメータを取得する方法を示しています:

URLDemo.java

import java.net.*; import java.io.*; public class URLDemo { public static void main(String [] args) { try { URL url = new URL("http://www.example.com/index.html?language=cn#j2se"); System.out.println("URL:" + url.toString()); System.out.println("プロトコル:" + url.getProtocol()); System.out.println("認証情報:" + url.getAuthority()); System.out.println("ファイル名とリクエストパラメータ:" + url.getFile()); System.out.println("ホスト名:" + url.getHost()); System.out.println("パス:" + url.getPath()); System.out.println("ポート:" + url.getPort()); System.out.println("デフォルトポート:" + url.getDefaultPort()); System.out.println("リクエストパラメータ:" + url.getQuery()); System.out.println("フラグメント位置:" + url.getRef()); }catch(IOException e) { e.printStackTrace(); } } }

上記のインスタンスをコンパイルして実行した結果は次のとおりです:

URL 为:http://www.example.com/index.html?language=cn#j2se
协议为:http
验证信息:www.example.com
文件名及请求参数:/index.html?language=cn
主机名:www.example.com
路径:/index.html
端口:-1
默认端口:80
请求参数:language=cn
定位位置:j2se

URLConnections クラスメソッド

openConnection() は java.net.URLConnection を返します。

例:

  • HTTPプロトコルのURLに接続する場合、openConnection() メソッドは HttpURLConnection オブジェクトを返します。

  • 接続するURLがJARファイルの場合、openConnection() メソッドは JarURLConnection オブジェクトを返します。

  • など...

URLConnection のメソッドリストは次のとおりです:

番号メソッドの説明
1Object getContent()
URLリンクのコンテンツを取得します。
2Object getContent(Class[] classes)
URLリンクのコンテンツを取得します。
3String getContentEncoding()
ヘッダーの content-encoding フィールド値を返します。
4int getContentLength()
ヘッダーの content-length フィールド値を返します。
5String getContentType()
ヘッダーの content-type フィールド値を返します。
6int getLastModified()
ヘッダーの last-modified フィールド値を返します。
7long getExpiration()
ヘッダーの expires フィールド値を返します。
8long getIfModifiedSince()
オブジェクトの ifModifiedSince フィールド値を返します。
9public void setDoInput(boolean input)
URL接続は入力および/または出力に使用できます。URL接続を入力に使用する場合は、DoInput フラグを true に設定します。使用しない場合は false に設定します。デフォルト値は true です。
10public void setDoOutput(boolean output)
URL接続は入力および/または出力に使用できます。URL接続を出力に使用する場合は、DoOutput フラグを true に設定します。使用しない場合は false に設定します。デフォルト値は false です。
11public InputStream getInputStream() throws IOException
URLの入力ストリームを返し、リソースの読み取りに使用します。
12public OutputStream getOutputStream() throws IOException
URLの出力ストリームを返し、リソースの書き込みに使用します。
13public URL getURL()
URLConnection オブジェクトが接続するURLを返します。

インスタンス

以下のインスタンスでは、URLはHTTPプロトコルを使用しています。openConnection はHttpURLConnectionオブジェクトを返します。

URLConnDemo.java

import java.net.*; import java.io.*; public class URLConnDemo { public static void main(String [] args) { try { URL url = new URL("http://www.example.com"); URLConnection urlConnection = url.openConnection(); HttpURLConnection connection = null; if(urlConnection instanceof HttpURLConnection) { connection = (HttpURLConnection) urlConnection; } else { System.out.println("URLアドレスを入力してください"); return; } BufferedReader in = new BufferedReader( new InputStreamReader(connection.getInputStream())); String urlString = ""; String current; while((current = in.readLine()) != null) { urlString += current; } System.out.println(urlString); }catch(IOException e) { e.printStackTrace(); } } }

上記のインスタンスをコンパイルして実行した結果は次のとおりです:

$ javac URLConnDemo.java 
$ java URLConnDemo
.....这里会输出サンプル首页(http://www.example.com)的 HTML 内容.....
その他の拡張