JavaApplet とCGI/PHP の連携
☆ JavaAppletとCGI/PHPの連携 ☆
JavaAppletから CGI/PHP にデータを送ることができます。もちろんJavaApplet からサーバにデータを送る方法には、他に ftp サーバと接続する、IRC サーバと接続するなどが考えられます。
しかし、一般のプロバイダでは、勝手にサーバを起動することはできないのが普通であり、CGI/PHP と通信するのは手軽な方法だと思います。
用途としては、JavaAppletでゲームを作成し、スコアをCGI/PHP で記録するなどがあります。
JavaApplet 作成の為のコンテンツ
GETによる方法
アプレットからGET で送る方法は簡単です。
URL クラス1 のコンストラクタにURL を表わす文字列を渡すときに“?” のあとにパラメータをつけた形を用いれば良いです。
URL クラスを用いるには、最初に「import java.net.*;」が必要です。
URL url = new URL("http://XXX.YYY.ZZZ.QQQ/~login /cgi-bin/HiLite.cgi?print"); getAppletContext().showDocument(url);
URL のコンストラクタは何種類か用意されていますが、
- new URL(絶対パス)
- new URL(getCodeBase(), 相対パス)
という形をよく使うと思われます。
後者の形では、アプレットの「.class」ファイルが置いてあるディレクトリからの相対パスを用いることができます。
URL url = new URL(getCodeBase(), "HiLite.cgi?print"); AppletContext().showDocument(url)
は、アプレットからWeb ブラウザに指令を送り、画面を新しいURL(url )に切り替えます。
import java.applet.*; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; public class sample2 extends java.applet.Applet implements ActionListener { TextArea tfStr; Button btPost; TextArea taView; Panel pnCtr,pnView; public void init() { //初期化(ほとんど画面構成) tfStr=new TextArea(5,32); btPost=new Button("Post"); btPost.addActionListener(this); taView=new TextArea(20,32); pnCtr=new Panel(); pnCtr.add(new Label("String")); pnCtr.add(tfStr); pnCtr.add(btPost); pnView=new Panel(); pnView.add(taView); add(pnCtr); add(pnView); } public void actionPerformed(ActionEvent e) { String str; if (e.getSource()==btPost) { // Postボタンクリックイベント //送信(send関数)して画面に結果表示 taView.setText(send("data="+tfStr.getText())); } } // PHP(CGIでもいい)にPost送信し、その結果を受信する関数 private String send(String stArg) { try { //送信先URL URL url = new URL(getCodeBase(), "sample2.php"); //ネットワーク接続 URLConnection urlCon = url.openConnection(); urlCon.setDoOutput(true); urlCon.setDoInput(true); urlCon.setAllowUserInteraction(false); //送信処理 PrintWriter writer = new PrintWriter(urlCon.getOutputStream()); writer.print(stArg); writer.close(); //受信処理、文字コード指定など BufferedReader mReader = new BufferedReader( new InputStreamReader( urlCon.getInputStream(), "SJIS")); StringBuffer result = new StringBuffer(); String temp = mReader.readLine(); //1行ずつ受信 while (temp!=null) { result.append(temp + "\n"); temp = mReader.readLine(); } mReader.close(); return result.toString(); } catch (Exception e) //エラー処理 { e.printStackTrace(); } return "error"; } }
POSTによる方法
GETはCGI へ送るデータがユーザにも見えるので、例えばゲームのハイスコアを記録するような用途では“ずる” がしやすいという欠点があります。
また、大量のデータを送るような用途にも向きません。
GET の場合ほどは簡単ではないが、POSTによってJava アプレットからCGI にデータを送ることも可能です。
POST でCGI にデータを送るのは次のような手順で行います。
まず次のようにCGI のURL(url )を指定して、URL オブジェクトを作成します。
URL url = new URL(url );
続いて、このURL への接続を確立し、データを送る準備をします。
URLConnection urlCon = url.openConnection(); urlCon.setDoOutput(true); urlCon.setDoInput(true); urlCon.setAllowUserInteraction(false);
実際にデータを送って、最後に接続を閉じます。
PrintWriter writer = new PrintWriter(urlCon.getOutputStream()); writer.close();
続けて、CGI の出力を受け取ります。
BufferedReader mReader = new BufferedReader( new InputStreamReader( urlCon.getInputStream(), "SJIS")); mReader.close();
GET の場合のように、getAppletContext().showDocument(url)という形で、ブラウザにCGIの出力を表示させることはできません
その場合には工夫が必要です。
オススメ書籍
HTML5、CSS3、JavaScript等の学習に役立つ書籍を紹介します。