注: この Java 配備ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。
「プロキシ構成」では、次のトピックについて説明します。
java.net.ProxySelector
APIJava コントロールパネルでは、「ネットワーク設定」サブパネルに次の 4 つのプロキシオプションがあります。
「ブラウザの設定を使用」を選択した場合、プロキシ情報は完全にブラウザを介して入力されます。Internet Explorer の場合は、「ツール」>「インターネット オプション」で「接続」タブを開き、「ローカル エリア ネットワーク (LAN) の設定」を選択します。Netscape の場合は、「編集」>「設定」で「カテゴリ」の下の「詳細」を選択して、「プロキシ」を選択します。この機能方法と、ブラウザを介して設定される 3 つのタイプの接続 (直接、手動、および自動) については、以降のセクションで説明します。
Java コントロールパネルで「プロキシ・サーバーを使用」を選択した場合、2 つの選択肢があります。
「自動プロキシ構成スクリプトを使用」を選択した場合、FindProxyForURL(URL url)
という名前の JavaScript の位置を示す URL を入力しなければなりません。この JavaScript によって返されるプロキシサーバーが URL に使用されます。このスクリプトに対するサポートは、次の「自動プロキシ構成」で説明する内容と同じです。
直接接続ではプロキシを使用しません。モバイルユーザーがモデムを介して会社に接続するような特定の状況では、イントラネット環境への直接接続が必要になります。これらの場合には、プロキシは使用すべきではありません。
ブラウザのプラットフォームが異なると、プロキシ情報を格納する方法も異なるため、プロキシ情報を取得するジェネリックなメカニズムはありません。ブラウザとプラットフォームの組み合わせ 2 種類によって、プロキシ情報を取得する方法を説明します。
Microsoft Internet Explorer: Internet Explorer では、プロキシ情報は Windows レジストリの同じキーセット内に格納されます。Java Plug-in と Java Web Start では、この情報をレジストリから直接抽出します。
Mozilla: Mozilla では、プロキシ情報をローカルマシンのユーザープロファイルディレクトリ内の設定ファイルに格納します。また、プロキシ情報を特定するための公開 API を利用できます。Java Plug-in では Mozilla の公開 API を使用し、Java Web Start では設定ファイルを読み取って解析し、プロキシ情報を取得します。
Netscape Navigator: Navigator では、プロキシ情報をローカルマシンのユーザープロファイルディレクトリ内の設定ファイルに格納します。Java Plug-in と Java Web Start では、このファイルを読み取って解析し、プロキシ情報を取得します。
Java Plug-in と Java Web Start では、プロキシ情報を起動時に取得します。Java Plug-in または Java Web Start の起動後にプロキシ設定を変更した場合、Java コンソールの p オプションを使用して、プロキシ情報を強制的に再ロードします。Java Web Start はアプリケーションごとに再起動するため、以後の起動時には自動的に新しいプロキシ情報が使用されます。
Internet Explorer: Java Plug-in と Java Web Start では、このプロトコルに関連付けられたプロキシサーバーおよびポート設定を認識およびサポートします。IE は、プロキシサーバーバイパスリスト内のさまざまな構文をサポートします。次にその構文を示します。
たとえば、プロキシサーバーバイパスリストに "203.0.113.0;*.eng;http://*.com" を指定すると、次の場合、常にブラウザはプロキシをバイパスします。
現在のところ、Java Plug-in と Java Web Start でサポートするのは、IE のプロキシサーバーバイパスリストの最初の 2 つの構文です。さらに、IE では、プロキシサーバーバイパスリストを使用しない、ローカル (イントラネット) アドレス用プロキシサーバーのバイパスもサポートされます。Java Plug-in と Java Web Start では、URL ホスト名がプレーンな (つまり、ホスト名に「.」が含まれない) 場合、プロキシサーバーをバイパスすることにより、このオプションをサポートします。
Mozilla と Netscape Navigator: Java Plug-in と Java Web Start では、このプロトコルに関連付けられたプロキシサーバーおよびポート設定を認識およびサポートします。たとえば、Mozilla のプロキシサーバーパイパスリストに ".eng,.sun.com" を指定すると、URL ホスト名が ".eng" または ".sun.com" で終わる場合、常にプロキシがバイパスされます。Java Plug-in と Java Web Start では、Mozilla と Navigator のプロキシサーバーバイパスリスト内で、この構文をフルサポートします。
使用するブラウザでの手動プロキシ構成の詳細は、ブラウザのユーザーガイドを参照してください。
自動プロキシ構成はブラウザ内で、拡張子が .pac または .js の JavaScript ファイルを含む特定の URL を設定することでサポートされます。このファイルには、FindProxyForURL という関数が含まれます。この関数には、ブラウザが接続要求を受信するとき、どのプロキシサーバーを使用するかを決定するロジックが含まれます。この関数は、特定のイントラネット環境で、システム管理者により記述されます。ブラウザは、起動時に JavaScript ファイルの URL を認識し、直接接続を使用してローカルマシンにダウンロードします。その後、新規接続を確立する必要がある場合、ブラウザは常に JavaScript ファイル内の FindProxyForURL JavaScript 関数を実行してプロキシ情報を取得し、接続を設定します。
Internet Explorer: 起動時に、Java Plug-in は、直接接続を使用して JavaScript ファイルをローカルマシンにダウンロードします。その後、接続の新規確立が必要になるたびに、FindProxyForURL
関数が実行され、Internet Explorer の JavaScript エンジンを使用してプロキシ情報が取得されます。
Mozilla/Netscape Navigator: 起動時に、Java Plug-in は、直接接続を使用して JavaScript ファイルをローカルマシンにダウンロードします。その後、接続の新規確立が必要になるたびに、FindProxyForURL
関数が実行され、Mozilla や Navigator の JavaScript エンジンを使用してプロキシ情報の取得が行われます。
Windows: 起動時に、Java Web Start は、直接接続を使用して JavaScript ファイルをローカルマシンにダウンロードします。その後、接続の新規確立が必要になるたびに、FindProxyForURL
関数が実行され、Internet Explorer の JavaScript エンジンを使用してプロキシ情報が取得されます。
Linux/Solaris: 起動時に、Java Web Start は、直接接続を使用して JavaScript ファイルをローカルマシンにダウンロードします。その後、接続の新規確立が必要になるたびに、FindProxyForURL
関数が解析され、もっとも適切な情報が推測されて、プロキシ情報の取得が行われます。
JavaScript エンジンについて、すべてのプラットフォームの Java Plug-in と、Windows 上の Java Web Start に対して、次の事項が当てはまります。
DIRECT
" が含まれる場合、Java Plug-in と Java Web Start は直接接続とみなす。PROXY
" が含まれる場合、最初のプロキシ設定を接続に使用する。SOCKS
" が含まれる場合、SOCKS バージョン 4 を接続に使用する。使用するブラウザでの自動プロキシ構成の詳細は、ブラウザのユーザーガイドを参照してください。
java.net.ProxySelector
API指定されたホストのプロキシ構成を特定しなければならないことがあります。プロキシ構成を調べることで、適切なプロキシサーバーを通じてホストに接続するためのコードをより適切に記述することができます。J2SE 5.0 では、プロキシ構成をサポートする新しい API として java.net.ProxySelector
があります。次は簡単なコードの例です。
private Proxy findProxy(URI uri)
{
try
{
ProxySelector selector = ProxySelector.getDefault();
List<Proxy> proxyList = selector.select(uri);
if (proxyList.size() > 1)
return proxyList.get(0);
}
catch (IllegalArgumentException e)
{
}
return Proxy.NO_PROXY;
}