HttpRequestクラスを使用した通信
javafx.
では,
リスト2
ar charset: String;
var request: HttpRequest;
request = HttpRequest {
location: "http://gihyo.jp/dev/serial/01/javafx"
onResponseHeaders: function(headerNames: String[]) {
for (headerName in headerNames) {
if (headerName == "content-type") {
// HTTPヘッダの content-type から文字コードを取得
var contentType
= request.getResponseHeaderValue(headerName);
var index = contentType.indexOf("=");
charset = contentType.substring(index+1);
}
}
}
onInput: function(stream: InputStream) {
var reader: BufferedReader;
if (charset != null) {
// 文字セットを指定してリーダを生成
reader = new BufferedReader(
new InputStreamReader(stream, charset));
} else {
reader = new BufferedReader(
new InputStreamReader(stream));
}
while(true) {
var text = reader.readLine();
if (text == null) {
break;
}
println(text);
}
stream.close();
}
}
// リクエストをキューに入れる
request.enqueue();
Stage {
title: "Dummy"
scene: Scene {
width: 200
height: 200
content: [ ]
}
}
RemoteTextDocumentクラスを使ったサンプルよりもずいぶん長くなってしまいました。
HttpRequestクラスでは接続するサーバのURLはlocationアトリビュートで設定します。ここでは,
HttpRequestクラスではonXというアトリビュートが多く定義されています。X の部分にはConnectingやReadingなどHTTPの状態を表した言葉が入ります。これらのアトリビュートには,
上記のスクリプトでは,
onResponseHeadersアトリビュートでは引数としてヘッダの名前の一覧が与えられます。もし,
次にonInputアトリビュートでボディの読み込みを行います。onInputアトリビュートでは引数としてInputStreamオブジェクトが与えられます。そこで,
後は,
なお,
では,
図2 HttpRequestクラスサンプルの実行結果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>連載:ついにベールを脱いだJavaFX|gihyo.jp … 技術評論社</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<<以下,省略>>
RemoteTextDocumentクラスを使った場合と異なり,