Javaサンプルコード辞典

JavaとAjaxでページを作る(4) - ServletからXMLデータを出力する

前回のサンプルではサーバーからXMLデータを取得し、XMLの値をフォームにするところまでを行いました。第4回目の今回は、XMLをServletから出力し、それをAjaxを利用して取得するようします。

Ajax側のコードは、open()の第2引数をServletのパスに変更するのみです。Servletでは、DOMを利用してXMLを出力します。
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class AjaxServlet extends HttpServlet {
      
      public void doGet(HttpServletRequest request, HttpServletResponse response)
                              throws ServletException, IOException {
            
            PrintWriter out = null;
            
            try
            {
                  //文字コードとMIMEタイプを指定する
                  response.setContentType("text/xml; charset=UTF-8");
                  //出力ストリームを取得する
                  out = response.getWriter();
                  
                  //DOM Documentのインスタンスを生成するBuilderクラスの
                  //インスタンスを取得する
                  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                  DocumentBuilder builder = factory.newDocumentBuilder();
                  //ビルダーからDOMを取得する
                  Document document = builder.newDocument();
                  
                  //XMLのルート要素(userタグ)を追加する
                  Element user = document.createElement("user");
                  document.appendChild(user);
                  
                  //ルート要素に子ノード(lastnameタグ)を追加する
                  Element name = document.createElement("lastname");
                  user.appendChild(name);
                  //lastnameタグのテキストを追加する
                  name.appendChild(document.createTextNode("Java"));
                  
                  //ルート要素に子ノード(firstnameタグ)を追加する
                  name = document.createElement("firstname");
                  user.appendChild(name);
                  //firstnameタグにテキストを追加する
                  name.appendChild(document.createTextNode("太郎"));

                  //DOMの内容をクライアントに出力する
                  TransformerFactory tfactory = TransformerFactory.newInstance();
                  Transformer transformer = tfactory.newTransformer();
                  transformer.transform(new DOMSource(document), new StreamResult(out));
            }
            catch(Exception e)
            {
                  e.printStackTrace();
                  throw new ServletException(e);
            }
            finally
            {
                  if(out != null)
                  {
                        try
                        {
                              out.close();
                        }catch(Exception e){}
                  }
            }
            
      }

}
このサンプルではロードボタンをクリックしても画面全体が再表示されることなく、フォームに値がセットされます。Ajaxとサーバーサイドのテクノロジーを組みあわせることによってユーザーインターフェースに優れたWebページを作ることが可能になっています。

(2007年11月25日)  

 ちょっと一休み. Javaキーワード並び替えゲーム

画面に表示される文字列を並び替えるとJavaに関連するキーワードになります。ヒントをたよりに並び替えを行ってエンターを押してください。 ユーザ登録をしてログインするとランキングに参加できます。
Flex Tips

DWRでリッチなWebページを作る!

Java Tips  java.io 編

Java Tips  java.lang 編

Java Tips  java.math 編

Java Tips  java.util 編

Java Tips  java.util.zip 編

Java Tips  java.text 編

Javaからデータベースを利用する