データの保存を用意する
これでデータ利用のための下準備は整いました。では、データストアを利用してみましょう。まずは、SampleDataを保存する機能を作成します。値を入力するフォームを用意し、送信するとサーブレットでSampleDataを作って保存するようにします。
まずは、フォームからです。war内に「add.html」というファイルを作成し、次のように記述します。
<?xml version="1.0" encoding="utf-8" ?> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>SampleData Add</title> </head> <body> <h1>SampleData</h1> <table> <form method="post" action="/add"> <tr> <td>MEMO:</td> <td><textarea name="data" cols="30" rows="3"></textarea></td> </tr> <tr> <td></td><td><input type="submit" /></td> </tr> </form> </table> </body> </html>

ここでは、テキストを記述するテキストエリアが1つあるだけのシンプルなフォームを用意してあります。ここから/addに送信し、これを受け取ったサーブレットが処理をする、という流れになります。
では、続いてサーブレットを作成します。「src」内に、新たに「AddServlet.groovy」というファイルを作成し、次のように記述をしてください。
import gae_app.SampleData
import javax.servlet.http.*
import javax.jdo.*
class AddServlet extends HttpServlet {
void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.contentType = "text/plain"
resp.writer.println "**CANNOT ACCESS!!**"
}
void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8")
String s = req.getParameter("data")
SampleData obj = new SampleData(s)
PersistenceManagerFactory pmf = PMF.get()
PersistenceManager pm = pmf.getPersistenceManager()
try {
pm.makePersistent(obj)
} finally {
pm.close()
}
resp.sendRedirect("/hello")
}
}
doGetには、簡単なメッセージを表示する処理だけを用意してあります。送信された処理は、doPostで行っています。ここでは、まず送られてきたパラメータを変数に取り出し、それを引数にしてSampleDataオブジェクトを作成しておきます。このオブジェクトをデータストアに保存するわけです。
PersistenceManagerFactory pmf = PMF.get() PersistenceManager pm = pmf.getPersistenceManager()
まず、PMF.getを呼び出してPersistenceManagerFactoryインスタンスを取得し、そこから「getPersistenceManager」というメソッドを呼び出しています。これは、実際にJDOを使ってオブジェクトを操作するための「PersistenceManager」クラスのインスタンスを取得するものです。
オブジェクトの保存は、このPersistenceManagerで行います。それが、try部分の処理になります。
try {
pm.makePersistent(obj)
} finally {
pm.close()
}
「makePersistent」は、引数に指定したオブジェクトを永続化する(データストアに保存する)働きをします。そして実行後、closeでインスタンスを開放し、作業終了です。意外と簡単です。
サーブレットを作成したら、web.xmlを開き、<web-app>内にサーブレットを次のように登録しておきます。
<servlet> <servlet-name>AddServlet</servlet-name> <servlet-class>AddServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddServlet</servlet-name> <url-pattern>/add</url-pattern> </servlet-mapping>
これで、/addでAddServletが呼び出されるようになります。実際に、add.htmlにアクセスして、テキストを投稿してみましょう。
