- - PR -
HTMLエンコード
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2002-10-07 18:20
じゃ、HTMLを解析するしかないんですね 皆さん、ありがとうございました。 クリス |
|
投稿日時: 2002-10-07 18:28
URLConnectionって正直に言うと使ったことなかったのですが、HttpURLConnectionクラスもabstractでしたね。URLConnectionがabstractなのは気付いてたのですが、HttpURLConnectionが実装クラスだと思い込んで、不思議だなあと思ってしまいました。 |
|
投稿日時: 2002-10-07 19:03
sun.net.www.protocol.http.HttpURLConnection
というクラスがどうも実装しているようです。 ソースは公開されてないのかな? |
|
投稿日時: 2002-10-07 19:22
★HttpURLConnectionのgetHeaderField(int)を使うと、次のようなフィールドがあります:
Server: Microsoft-IIS/5.0 Date: Mon, 07 Oct 2002 10:12:52 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Mon, 07 Oct 2002 02:04:19 GMT ETag: "20e7dbd8a56dc21:88b" Content-Length: 149 ★同じように、HttpURLConnectionのgetHeaderField(String)を使うと、Serverというフィールドを取得できます: getHeaderField("Server"); -> Microsoft-IIS/5.0 っていうことは、getHeaderField(String)は実装されています。(Java1.3.1で試してみた) クリス |
|
投稿日時: 2002-10-07 23:37
個人的に興味がわいたので整理してみます。
スレッドの本題からは少しずれますが。 まず、 URL url = new URL("http://***.com"); URLConnection connection = url.openConnection(); などとして URLのopenConnectionメソッドを呼びます。 そいつは、URLConnectionのインスタンスを返すわけですが、 実際には、URLConnectionを継承したなんらかのクラスの インスタンスを返すわけです。(抽象クラスはインスタンス化できないため) 内部的には public URLConnection openConnection() throws java.io.IOException { return handler.openConnection(this); } 上記のようにhandlerに委譲する形になっています。 handlerはURLStreamHandlerというクラスのインスタンスなのですが、 URLクラスのコンストラクタが"http"などのプロトコル名を元に 実装クラスを用意しておいてくれているわけです。 ここでどのような実装クラスが使われているかはちょっとわかりません。 で、結果的に今回の場合はそのhandlerが、 sun.net.www.protocol.http.HttpURLConnection というクラスのインスタンスをURLConnectionとして 返すと。 この辺は随分動的にやっているようで、場合によっては 違うクラスのインスタンスが使われることもありそうです。 |
|
投稿日時: 2002-10-08 01:03
私も少しURLクラスのソースを追ってみました。
amnakyさんの説明どおり、URLコンストラクタにより引数を解析し、取得したプロトコル名をもとにgetURLStreamHandler()メソッドを呼び出しています。 このgetURLStreamHandler()メソッド内では動的に"sun.net.www.protocol." + プロトコル名 + ".Handler"のような形でクラス名を生成している。その後、クラスローダーを用いて該当クラスをロードしClass.NewInstance()でインスタンス化する。 このとき一度生成したhandlerはクラス変数handlers(Hashtable)にプールしておき2度目以降は同じプロトコルであれば同じhandlerインスタンスを使いまわしているようです。 URLStreamHandlerは他にも sun.net.www.protocol.ftp.Handler sun.net.www.protocol.file.Handler sun.net.www.protocol.gopher.Handler sun.net.www.protocol.jar.Handler sun.net.www.protocol.mailto.Handler 等たくさんあるようです。 (それぞれ対応したURLConnectionの実装クラスも持っています) やはりsun.XXX.XXX.XXXパッケージのソースは公開されていないみたいですね。 |
|
投稿日時: 2002-10-08 02:00
> やはりsun.XXX.XXX.XXXパッケージのソースは公開されていないみたいですね。
ソースは公開されてますよ。 SDKに入ってる .jar ではなくて、Community Source Licence から入手できます。 |
|
投稿日時: 2002-10-08 10:05
皆様フォローありがとうございます。
なるほどCommunity Source License、こんなのがあったんですね。 何故か過去にユーザー登録だけはしていたらしく、 すんなりダウンロードできました。 ライセンスまわりを確認するのででちょっと時間が かかってしまいましたが、評価目的ならフィーは かからないんですね。 |
