はじめに
JavaScriptと連携した開発では、クライアントとサーバ間のデータのやり取りもAjaxを使い、ページ遷移することなく行われます。Vaadinではさらに一歩進められ、Javaのアプリケーションの中でやり取りする感覚でデータを扱うことができます。
もちろん、従来から行われているような「サーブレットにアクセスしてデータを取ってくる」というような方法も可能です。しかしそれよりも、データをモデルとして用意し、オブジェクティブに扱う方法がよりVaadinらしいスタイルと言えるでしょう。
対象読者
- Javaで手ごろなフレームワークを探している技術者
- 最近のフレームワークをごくざっと理解しておきたい方
- Web開発の手法がどうも気に入らない、と常々考えているJavaプログラマ
外部からのデータ取得
まずは、コンテナへの表示を外部から取得してみましょう。コンテナを多用するようになってくると、そこに表示する内容をどのように取得するかも重要な課題となってきます。特に、多量のデータを取得し表示するような場合、外部から必要な情報を取得して表示する仕組みが必要となります。
誰もが考えるのは「特定のアドレスにアクセスして必要なデータをテキストとして取得し表示する」という方法でしょう。実は、Vaadinには、そのための専用の便利な機能はありません。ストリームを使って必要な情報を取り出して利用することになります。
実際に、簡単なサンプルを作ってみましょう。まず、テキストを出力する簡単なサーブレットを用意してみます。ここでは「DataServlet」という名前で次のように作成をしておきます。
package com.example.myvaadin; import java.io.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DataServlet extends HttpServlet { private static final long serialVersionUID = 1L; public DataServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("sjis"); response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.write("<h2>外部からのデータ</h2><p>これは、外部から取得したテキストです。</p>"); } }
ここでは、doGetでテキストを出力するシンプルな処理を用意してあります。これはweb.xmlで次のように登録します。
<servlet> <description></description> <display-name>DataServlet</display-name> <servlet-name>DataServlet</servlet-name> <servlet-class>com.example.myvaadin.DataServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DataServlet</servlet-name> <url-pattern>/data</url-pattern> </servlet-mapping>