Applet⇔Servlet 間通信

Servlets に Beans を組み込んで、Applet と通信します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. "C:\tomcat\webapps\applet のフォルダー構成です。
    +がフォルダーで、・がプログラマが格納するファイルで、*がコンパイラなどで作成するファイルです。
    +applet
        +WEB-INF
            +classes
                +mybean
                    ・msgbean.java  //msgを定義したBeans
                    *msgbean.class
                ・MsgServ.java      //呼び出されるServlet
                *MsgServ.class
            ・web.xml               //Servletsのマッピング
        ・MsgApplet.java            //Servletを呼び出すApplet
        *MsgApplet.class
        ・MsgApplet.htm             //Appletを起動するHTML
    
  2. ソースプログラムです。
    ファイル名 説明
    msgbean.java msgを定義したBeans
    MsgServ.java Appletから呼び出されるServlet
    MsgApplet.htm Appletを起動するHTML
    MsgApplet.java Servletを呼び出すApplet
    web.xml TEXT FILE を入力 を参照して各自で作成して下さい
  3. msgbean.java をコンパイルして msgbean.class を作成します。
    MsgServ.java をコンパイルして MsgServ.class を作成します。
    MsgApplet.java をコンパイルして MsgApplet.class を作成します。
    詳細は JSP Error Guide を参照して下さい。
  4. HTML から Applet を呼び出します。
    "C:\tomcat\bin\tomcat7w.exe" を選択して、管理者として実行から apache-tomcat を起動します。
    WWW ブラウザを起動して下記の URL を張り付けて下さい。
    http://localhost:8080/applet/MsgApplet.htm
    TextField に適当なメッセージ(XXXXX)をタイプしてボタンをクリックします。
    最初は "Initial Message" が表示されます。
    次からは、前回タイプしたメッセージが表示されます。
    WWWブラウザで新しいウインドウを開いて呼び出して下さい。
    二つのウインドウから交互に操作して、Beans が共有されていることを確認して下さい。

プログラムの説明

  1. "http://localhost:8080/applet/MsgApplet.htm" で Applet を呼び出します。
    URL("http://localhost:8080/applet/MsgServ"); が、ここから呼び出す Servlet のプログラムです。
    MsgApplet.java では、ウインドウに TextField と Button を貼り付けます。
    TextField にメッセージをタイプしてボタンをクリックします。
    req = textfield.getText(); で TextField のメッセージを取得します。
    url.openConnection() で MsgServ.class に接続します。
        try
        {   URL url = new URL("http://localhost:8080/applet/MsgServ");
            //Textfield からメッセージを取得
            String req = textfield.getText();
            req = new String(req.getBytes("SJIS"), "8859_1");
            //URL に接続
            URLConnection ucon = url.openConnection();
            ucon.setDoOutput(true);
            ucon.setDoInput(true);
            ucon.setUseCaches(false);
        
  2. dos.writeUTF(req); で MsgServ.class に送信メッセージを設定します。
            //メッセージを送信
            DataOutputStream dos = new DataOutputStream(ucon.getOutputStream());
            dos.writeUTF(req);
            dos.flush();
            dos.close();
        
  3. result = dis.readUTF(); でメッセージを受け取って、setText(result) で表示します。
            //メッセージを受信
            DataInputStream dis = new DataInputStream(ucon.getInputStream());
            String result = dis.readUTF();
            dis.close();
            //受信メッセージを表示
            textfield.setText(result);
        
  4. Applet から呼び出される MsgServ.java です。
    DataInputStream() を生成して readUTF() でメッセージを受け取ります。
        DataInputStream din = new DataInputStream(req.getInputStream());
    
        // メッセージを受け取る
        String str = din.readUTF();
        str = new String(str.getBytes("8859_1"), "SJIS");
        
  5. sc.getAttribute() で Beans を取得します。
    Beans が生成されていないとき、new msgbean() で生成します。
        // Beans を生成
        msgbean appObject = null;
        ServletContext sc = getServletContext();
        appObject = (msgbean)sc.getAttribute("appObject");
        // オブジェクトが生成されていない場合、生成します。
        if (appObject==null)
        {   appObject = new msgbean();
            sc.setAttribute("appObject", appObject);
        }
        
  6. Beans に記憶されているメッセージを dos.writeUTF() で送信メッセージとして設定します。
    Beans のメッセージを 新しいメッセージに置き換えます。
        // 記憶しているメッセージを返す
        res.setContentType("application/octet-stream");
        DataOutputStream dos = new DataOutputStream(res.getOutputStream());
        dos.writeUTF(appObject.getMsg());
        dos.flush();
        dos.close();
    
        // 新しいメッセージに置き換える
        appObject.setMsg(str);
        

Java Game Program