課題4においてCで作成したものと同機能のHTTPサーバとHTTPクライアントをJava で実装せよ.この時,クライアントにおいては,以下の仕様を満たすBrowseクラスを作成・利用して,サーバからダウンロードしたhtmlファイル内の リンクを自由に辿れるようにせよ.クライアントの実行例は以下の通りである (プロンプトやリストの表示などのUIは自由に工夫すること).
% java Client > http://www.fos.kuis.kyoto-u.ac.jp/le2soft/index.html (URLを入力) ...(実験2のページのindex.htmlの内容が表示される)... [list of links] 1. http://www.fos.kuis.kyoto-u.ac.jp/le2soft/faq.html 2. http://www.fos.kuis.kyoto-u.ac.jp/le2soft/basic.html ...(index.html内のリンク先URL一覧)... > 1 (リンクの番号を入力) ...(faq.htmlのソースとリンク一覧が表示される)... >
インスタンス変数の例:
メソッドの例:
class Browse {
// instance variables
public String url, contents;
public String[] links;
....
// constructor
public Browse() {
url = "";
links = new String[0];
contents = "";
}
// methods
public void collectLinks() {
// contents中のリンクを抽出し,linksを更新
}
public void printLinks() {
// linksの内容をナンバリングしながら表示
}
public String getLink(int n) {
// links中のn番目のURLを返す
}
...
}
ClientクラスではBrowseクラスのオブジェクトを生成
(例えばbrowseとする)しておき,入力されたURLや,選択さ
れたリンク番号に応じて,browseの内容を更新したり, browseの情報を取得したりしながら,サーバに接続したり,コンテ
ンツを表示したりすればよい.以下は一例である.
class Client {
public static void main(String[] args) {
Browse browse = new Browse("", new String[0], "");
...
// 最初のURL入力を受けつけ,browseを更新
while(true) {
// browseの「現在閲覧中のURL」を解析
// サーバに接続し,リクエストを送信
// 受信したコンテンツを表示し,browseを更新
// コンテンツ中のリンクを収集し,browseを更新
// リンク一覧を表示
// 入力された番号に応じてbrowseを更新
}
}
// main中で利用されるメソッド群
}
クラス毎の役割についても,URLの解析やリンクの番号選択の処理を
どこで行なうか?など,設計の仕方は様々である.正しく動作しさ
えすれば「必ずこのように実装しなければいけない」という絶対的
な正解はないので,各自でどのように実装すればよいかを考えるこ
と.
NAKAZAWA Koji