イントロダクション
前回、クローリングについて学びました。
今回は、フレームワークなどを使用しないでウェブにアクセスしてみようと思います。
前回までの実装
Applicationクラスを拡張して、下のような画面を作成する準備をした。最終的には、コマンドを実行する画面を作成しました。この画面を作成するためのコード解説をしています。
この記事の状態としては、画面の表示ができて、下のような文字が表示できている状態です。
Hello user please input command!
Cmd $ >hello
---------------------------------
* * ** * * * * * * *
* * * * * *
* * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * *
---------------------------------
*** push start or continue ***
start: s continue: c
---------------------------------
Cmd $ >
この時点で、
やってみること
・フレームワーク(外部のJar)などを使用せずにJDKに含まれているパッケージを使用して実装する。
・作成中のGUIの「CmdView」でコマンドを入力して起動するように追加修正する
設計
<要件>
・指定したURLにアクセスする実装は「UrlAccessor」クラスに任せる
・起動と結果の表示は「CmdView」クラスで行う
<実装部分>
・新規で「UrlAccessor」クラスを作成する
・「CmdView」クラスに「acc」コマンドが入力された時にgoogleの検索画面にアクセスする
追加修正する場所
処理としては、以下のようになります。
- コンストラクタで画面を生成するときに、「CmdCls.properties」を読込む処理の実装
- キーと値をセットにしているファイルを作成する
- 「hello」コマンド(前回作成済み)と「acc」コマンドを作成する
前回までのコード
/**
* イベント処理を行うクラスを生成<BR/>
* ・入力チェックを行い、禁止入力があった場合はカーソルを元の位置に戻す。
* @return キー入力のイベント処理クラス
*/
private EventHandler<KeyEvent> createKeyPressEvent() {
return new EventHandler<KeyEvent>() {
public void handle(KeyEvent evt) {
// テキストエリアを取得する
TextArea src = (TextArea) evt.getSource();
// 入力を無効にする
if (isDisabledInput(evt)) {
System.out.println("*** isDisable ***");
resetCursor(src);
return;
}
if (KeyCode.LEFT.equals(evt.getCode())) {
System.out.println("Sart: " + startCursorPos + " Current: " + currentPos + " getCaret: " + src.getCaretPosition());
if (startCursorPos > src.getCaretPosition()) {
// 左の矢印が押下された時
src.positionCaret(currentPos);
}
}
currentPos = src.getCaretPosition();
// チェック用のコンソール出力処理
System.out.println("EventType: " + evt.getCode());
}
};
}
CmdView
コマンドを実行する為のメソッドを追加
if (KeyCode.ENTER.equals(evt.getCode())) {
// テキストエリア内の文字列を全て取得
String allText = src.getText();
String command = getCommand(allText);
src.setText(allText + CMD_START);
// "Cmd $ "の文字列の位置を取得
System.out.println("Command: " + command);
// コマンドの実行
executeCmd(command);
cursorPos = allText.length() + CMD_START.length();
src.positionCaret(cursorPos);
}
コマンドを実行する為のキーとプロパティを作成
<フィールドにプロパティファイル名(パス)>
/** プロパティファイル名 */ private static final String CMD_PROPERTY = "CmdCls"; /** リソースバンドル */ private ResourceBundle bndle;
<プロパティファイルのロード>
// プロパティファイルのロード bndle = ResourceBundle.getBundle(CMD_PROPERTY); System.out.println("Properties: " + bndle.getString("acc"));
/**
* コマンドを実行します<BR/>
* 登録したコマンドにない入力の時は<BR/>
* エラーメッセージをテキストエリアに出力します。
* @param command コマンド文字列
*/
private void executeCmd(String command) {
// この部分は次回作成します。
}
まとめ
表示したコマンド画面に、入力した値(文字列)から「コマンド」部分を切り出してコマンドを取得する「getCommand()」を作成思案した。
コマンドの実装部分は次回ということで
でわでわ。。。