やりたい事は簡単でも、環境からの説明を入れると長くなってしまうので、それぞれの要点部分は他から参照するようにしています。
対象とする URL は、PHP で作成した簡易掲示板です。この簡易掲示板は、Google Chrome で開いた時のみ簡易掲示板として働きます。それ以外では 簡易的な JSON の文字列で掲示板用のデータを返します。Google Chrome でも、モバイルモードで、デバイス無しで UA を適当に文字列入れると JSON で表示します。
Java で Window プログラムをテストするのに、Vector で配布されている自己解凍式の Pleiades を使い、Window Builder ですぐボタンとそのイベントコードまでが作成されます。後は、そのイベントからここにあるクラスを作成して呼び出すだけです。
このクラスは、元々は Android 用に作ったもので、リンク先には POST もあります。
ここでは、まだ実装していませんが、この後 Google gson を使って JSON データを利用する事になります。
プロジェクト作成からボタン作成まで
日本語 Eclipse 4.4 Pleiades All in One Java(Vector から) で即 Window Builder
HttpGet クラス
※ セッション対応した、HttpGet と HttpPost はこちらから
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpGet {
// **********************************************
// URL と charset の初期値
// **********************************************
private String initTargetUrl = "http://toolbox.winofsql.jp/log.php";
private String initTargetCharset = "utf-8";
// **********************************************
// コンストラクタによって初期値が違います
// **********************************************
public HttpGet() {
}
public HttpGet(String targetUrl) {
initTargetUrl = targetUrl;
}
public HttpGet(String targetUrl,String targetCharset) {
initTargetUrl = targetUrl;
initTargetCharset = targetCharset;
}
// **********************************************
// コンストラクタで指定した URL と charset で処理
// **********************************************
public String execute() {
return execute(initTargetUrl,initTargetCharset);
}
// **********************************************
// 指定した URL へ 任意の charset で処理
// **********************************************
public String execute(String targetUrl,String targetCharset) {
StringBuffer web_data = new StringBuffer();
try {
// **********************************************
// インターネットへの接続
// **********************************************
// 読み込む WEB上のターゲット
URL url = new URL(targetUrl);
// 接続オブジェクト
HttpURLConnection http = (HttpURLConnection)url.openConnection();
// GET メソッド
http.setRequestMethod("GET");
// 接続
http.connect();
// **********************************************
// ストリームとして読み込む準備
// **********************************************
// 以下読み込み3点セット InputStream / InputStreamReader / BufferedReader
InputStream input_stream = http.getInputStream();
// UTF-8 でリーダーを作成
InputStreamReader input_stream_reader = new InputStreamReader(input_stream, targetCharset);
// 行単位で読み込む為の準備
BufferedReader buffered_reader = new BufferedReader(input_stream_reader);
// **********************************************
// 行の一括読みこみ
// **********************************************
String line_buffer = null;
// BufferedReader は、readLine が null を返すと読み込み終了
while ( null != (line_buffer = buffered_reader.readLine() ) ) {
// コマンドプロンプトに表示
web_data.append( line_buffer );
web_data.append( "\n" );
}
// **********************************************
// 接続解除
// **********************************************
http.disconnect();
}
catch(Exception e) {
// 失敗
System.out.println( e.getMessage());
}
return web_data.toString();
}
}
読み出す URL 部分には、以下のページで紹介している内容を使用しています。
PHP による『超簡易掲示板』 / アプリケーションからの POST 検証用
本来は localhost に設置して Google Chrome でデータを登録した結果を JSON で取得するように作成されています
localhost の構築は、以下で説明している 『AN HTTP Server』を使用すると簡単です
実運用では無く、学習用の WWWサーバーとしてはこれ以外に無い『AN HTTP Server』ですが、古いソフトなので使い方にコツがあります
読み出し部分
/**
* Create contents of the application window.
* @param parent
*/
@Override
protected Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(null);
{
Button btnNewButton = new Button(container, SWT.NONE);
btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("ボタンの処理");
HttpGet hg = new HttpGet();
// String result =
// hg.execute(
// "http://localhost/basic/log_01/log.php",
// "utf-8"
// );
String result = hg.execute();
System.out.println(result);
}
});
btnNewButton.setBounds(10, 10, 81, 28);
btnNewButton.setText("New Button");
}
return container;
}
localhost で行った実行結果は以下のようになっています。
Eclipse で、コメントのオン・オフは、行を選択して CTRL + / です。
▼ localhost を Google Chrome で開いたものです。