前回のサンプルではサーバーから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
{
response.setContentType("text/xml; charset=UTF-8");
out = response.getWriter();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element user = document.createElement("user");
document.appendChild(user);
Element name = document.createElement("lastname");
user.appendChild(name);
name.appendChild(document.createTextNode("Java"));
name = document.createElement("firstname");
user.appendChild(name);
name.appendChild(document.createTextNode("太郎"));
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ページを作ることが可能になっています。
ちょっと一休み. Javaキーワード並び替えゲーム
画面に表示される文字列を並び替えるとJavaに関連するキーワードになります。ヒントをたよりに並び替えを行ってエンターを押してください。
ユーザ登録をしてログインするとランキングに参加できます。