データの保存を用意する
これでデータ利用のための下準備は整いました。では、データストアを利用してみましょう。まずは、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にアクセスして、テキストを投稿してみましょう。