課題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