エンタープライズ:特集 2003/07/01 15:46:00 更新

JAVA Developer 2003年8月号より転載
FlashとTomcatで実現する使いたくなるWebアプリ (9/10)

(6)onClipEvent(load)

 ロードイベントハンドラでは、そのページのGUI部品の構築を行っています。テキスト入力ページの場合は、すでに入力された値の復元を行います。単一選択および複数選択ページの場合は、それぞれベースとなるラジオボタンまたはチェックボックスを必要個数だけ複製し、設定に従った表示を行っています。また、すでにラジオボタンかチェックボックスが選択されている場合は、それを復元します。

 Flashでは、なにもない状態からnewでGUI部品のインスタンスを生成するという手段が用意されていません。通常、フレーム上に配置されているものをそのまま使うか、複製して使うか、あるいは外部からロードして使います。このイベントハンドラで複製元となったラジオボタンやチェックボックスは、そのまま表示するものではないため、そのGUI部品の配置場所は、キャンバスからはみ出たところにしています。

(7)onClipEvent(unload)

 単一選択および複数選択ページでは、loadで複製したオブジェクトを順番にremoveMovieClipで抹消して掃除します。この掃除を行わないと、そのページを表示するたびに、オブジェクトが増え続けてしまいます。

●アンケートサーブレット

 アンケートクライアントができあがったら、次はサーバーサイドで動作するサーブレットを作ります。作成するサーブレットは、Flashと通信するからといって特別なものではありません。アンケートクライアントから送られてくるアンケート結果を受け取る処理(SaverServlet)と、アンケートのサマリーをアンケートクライアントに送る処理(SummaryServlet)を実装します。

(1)SaverServlet(リスト10)

 アンケート結果をXML文書として受け取ります。本来であれば、受け取ったXML文書をチェックして、データベースなどのストレージに保存すると思うのですが、今回はFlashとのやりとりに主眼を置いているため、受信して標準出力に表示するのみとします。そのあと、サマリー送出処理にフォワードします。

リスト10 SaverServlet.java(一部抜粋)
protected void doPost(HttpServletRequest req,
                      HttpServletResponse res)
                      throws ServletException, IOException
{
   Document doc = getRequestAsDocument (req);
   Vector result_list = analyzeDocument (doc);
   for (int i = 0; i < result_list.size(); i++)
   {
      System.out.println (result_list.elementAt (i));
   }
   sendResponse (req, res, result_list);
}
private Document getRequestAsDocument(HttpServletRequest req)
{
   String content_type = req.getContentType();
   int x = content_type.indexOf ('=');
   String charset = 
        (x >= 0 ? content_type.substring (x + 1) : null);
   try {
      DocumentBuilderFactory dbf = 
            DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      InputSource is = new InputSource ((charset != null ?
            new BufferedReader (new InputStreamReader (
                req.getInputStream(), charset)):
            req.getReader()));
      return db.parse (is);
   } catch (Exception e) {
      throw new RuntimeException (e);
   }
}
// 途中省略
private void sendResponse(HttpServletRequest req,
                          HttpServletResponse res,
                          Vector result_list)
{
   RequestDispatcher dispatcher = 
        req.getRequestDispatcher (this.config.response_url);
   try {
      dispatcher.forward (req, res);
   } catch (Exception e) {
      throw new RuntimeException (e);
   }
}

(2)SummaryServlet

 サーブレット名に反して、サマリーは送出せず、単純に「OK」というステータスフィールドを持つXML文書を送出します。このときContent-TypeおよびContent-Lengthヘッダを正しく送信しないと、アンケートクライアント(Flash側)で正しく受信できません。サーブレットコンテナがContent-Lengthを補ってくれる環境であれば、自前で設定する必要はないでしょう。

前のページ | 1 2 3 4 5 6 7 8 9 10 | 次のページ

[佐藤 毅,JAVA Developer]

Copyright © ITmedia, Inc. All Rights Reserved.