アットマーク・アイティ @IT@IT情報マネジメント@IT自分戦略研究所QA@ITイベントカレンダー  
 @IT > Master of IP Network > Mobile Connection > CGIによるGET/POSTメソッドを使った送受信
 

DoJaによるiアプリの開発入門(5)
CGIによるGET/POSTメソッドを使った送受信

服部隆志
http://www.sinsen.org/
http://www.ngy1.1st.ne.jp/~takashi/sinsen_index.html
2001/7/4

 

今回のおもな内容
GET/POSTメソッドを使用した場合の流れ
簡易掲示板を作成する
ソースの記述とビルド
CGIの記述
アップロードと属性の変更
エミュレータ・実機での動作確認
次回は互換性のあるプログラム作成法

  前回(「HTTP通信とスクラッチパッドへのアクセス」)は、Generic Connectionのサンプルとして、指定したURLのリソース(GIFファイル)を利用しました。今回は、このURLにCGI(Common Gateway Interface)を指定して、GET/POSTメソッドを使った送受信を行ってみたいと思います。

 なお今回使用するCGIではPerlを使っていますが、それ以外のCGIを使うことも可能です。

  GET/POSTメソッドを使用した場合の流れ

 CGIとの交信メソッドにGETを使用した場合とPOSTを使用した場合とでは、データの送信方法が違います。以下にGETメソッド、POSTメソッドを使用した場合の処理の流れを紹介します。DoJaとCGIとの連携でも、CGIへのアクセス方法やCGIプログラム自身は通常のブラウザの場合とほぼ変わりませんので、CGIを利用した経験のある方であれば容易に理解できると思います。

■GETメソッド

  1. 送信するデータ(String)を「&」で連結する
  2. 送信するデータをcom.nttdocomo.net.URLEncoder#.encode()を使いエンコードする
  3. CGIを指定するURLの末尾に「?」を加え、その後にURLエンコードしたデータを追加する
  4. 送信するデータを加えたURLをConnectorに設定する
  5. リクエストメソッドにGETを指定する
  6. HttpConnection#connect()を使い実際にネットワーク接続する
  7. CGIから返信されてきたデータを受信する

■POSTメソッド

  1. 送信するデータ(String)を「&」で連結する
  2. CGIを指定するURLをConnectorに設定する
  3. リクエストメソッドにPOSTを指定する
  4. HttpConnection#setRequestProperty(String,String)で送信するデータの形式を設定する
  5. Connector#openOutputStream()でデータ送信のための出力を得る
  6. 得た出力を使いデータをストリームバッファへ出力する
  7. HttpConnection#connect()で実際にネットワーク接続する(この後データがCGIへ渡される)
  8. CGIから返信されてきたデータを受信する

 GETメソッドでは大きなデータを送信するのが大変なので、大きなデータを送信する場合はPOSTを使った方がいいでしょう。

  簡易掲示板を作る

 今回のサンプルは、「iアプリを使った簡易掲示板」です。この簡易掲示板では「他人の発言に返信(リプライ)することができない」「最新5件までの内容しか保存されない」「改行ができない」などの制限がありますが、Perlプログラムに詳しい方であれば容易に拡張することができると思います。

 また、ただの簡易掲示板ではiモードだけで実現できてしまい、iアプリである必要性がありません。そこで今回はメッセージの表示部分にCanvasを使い、背景にイメージを付けてみます。

■ソースの記述とビルド

 ではまず、iアプリ側のプログラムをDoja上で作成します。これまでと同様に新規プロジェクト「iBBS」を作成し、srcフォルダへ「iBBS.java」ファイルを保存します(今回のソースファイルは長いので、こちらからダウンロードしてください)。また、背景に表示するGIFファイルも用意してresフォルダへ入れておいてください。

 また今回も、前回同様ネットワークを使用しているため「アプリケーション属性設定」のAppName、ClassNameに加えUseNetworkにhttpを設定するのをお忘れなく。

 ソースの記述が終わったらビルドし、JAMファイルとJARファイルを作成します。

図1 アプリケーション属性設定で「UseNetwork」に「http」を設定する

■CGIの記述

 iアプリのソース記述が終わったら、iアプリと交信するCGIのソース記述に移ります。こちらは、Webサーバ上で掲示板を実現するためのプログラムです。

 「ibbs.cgi」ファイルを適当な場所へ保存してください。またテキストエディタで何も書かないまま「名前を付けて保存」することで空のテキストファイル「log.txt」「ibbs.txt」を作成します。

iBBS.java、ibbs.cgi、log.txt、ibbs.txtをアーカイブしたものを用意しましたので、必要に応じてこちらからダウンロードしてください。

 なおこのPerlプログラムでは、Kazumasa Utashiro氏による日本語コード変換スクリプト「jcode.pl」を使用していますので、それも用意してください*1

*1:jcode.plの最新版は、ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/から入手できます。

 Perlプログラムの第1行目は、設置するサーバーによってPerlのパスが異なることがあります。設置する前にサーバーの設定を確認し、任意に修正してください。

 なおこのPerlプログラムを作成するにあたり、ゆたか氏(ゆたかのホームページ)、Atsushi氏(Atsushi's Homepage)のプログラムを参考にさせていただきました。

■アップロードと属性変更

 これまでに作成したすべてのファイル(iBBS.jar、iBBS.jam、ibbs.cgi、ibbs.txt、log.txt、jcode.pl)に加え、iアプリをダウンロードするHTMLを用意したら、これらのファイルをサーバへアップロードします。

 iBBS.jarはバイナリモードで、それ以外のファイルはアスキーモードで同じサーバへアップロードしてください。

 アップロードが終わったら、CGIで扱うファイル(ibbs.cgi、jcode.pl、ibbs.txt、log.txt)の属性を変更します。FTPクライアントなどを使いibbs.cgiとjcode.plを777あるいは755へ、ibbs.txtとlog.txtを666へ変更してください。

■エミュレータ・実機での動作確認

 DoJa付属のエミュレータや503iシリーズ実機で動作を確認します。エミュレータでの動作確認には、前回同様「編集>設定」での「読み込み先URL」と「NetworkAccess」を設定しなければならないことに注意してください。またサーバによってはエミュレータでのアクセスを拒否されることもあります。

 この簡易掲示板のプログラムでは、ソフトキー2(右)でGETとPOSTを切り替えることができるようになっています。どちらを使っても、同じ結果が得られるのがお分かりいただけると思います。

図2 簡易掲示板をエミュレータで実行する画像をクリックすると拡大表示します

  次回は互換性のあるプログラム作成法

 次回はiアプリを作成する際の大きな障害の1つである機種依存について着目し、互換性のあるプログラム作成法についてご紹介します。

 次回、「互換性のあるプログラム作成法」編の掲載は7月下旬ごろを予定しています

「連載 DoJaによるiアプリの開発入門」


 


 
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

   
@ITトップMobile Connectionフォーラム トップ会議室利用規約プライバシーポリシーサイトマップ