【ハウツー】
続いて実際に簡単なアプリケーションを作成しながらItsNatの使い方を見ていこう。作成するのは図4のようなエコーアプリケーションだ。テキストフィールドに文字列を入力してボタンをクリックするとメッセージが表示される。
まずはリクエストを受け付けるためのサーブレットを作成する(リスト1)。サーブレットはorg.itsnat.core.http.HttpServletWrapperクラスを継承し、init()メソッドをオーバーライドする。init()メソッドではItsNatの初期設定や、HTMLテンプレートの登録といった処理を行う。
リスト1: MyServlet.java
public class MyServlet extends HttpServletWrapper {
public void init(ServletConfig config) throws ServletException {
super.init(config);
// ItsNatの初期設定
ItsNatHttpServlet itsNatServlet = getItsNatHttpServlet();
ItsNatServletConfig itsNatConfig = itsNatServlet.getItsNatServletConfig();
itsNatConfig.setDebugMode(false);
itsNatConfig.setClientErrorMode(
ClientErrorMode.SHOW_SERVER_AND_CLIENT_ERRORS);
itsNatConfig.setLoadScriptInline(true);
itsNatConfig.setFastLoadMode(true);
itsNatConfig.setDefaultSyncMode(SyncMode.ASYNC_HOLD);
itsNatConfig.setAJAXTimeout(-1);
itsNatConfig.setOnLoadCacheStaticNodes("text/html", true);
itsNatConfig.setOnLoadCacheStaticNodes("text/xml", false);
itsNatConfig.setNodeCacheEnabled(true);
itsNatConfig.setAddFrameworkScriptFiles(true);
itsNatConfig.setFrameworkScriptFilesBasePath("js");
itsNatConfig.setDefaultEncoding("UTF-8");
itsNatConfig.setUseGZip(UseGZip.SCRIPT);
itsNatConfig.setDefaultDateFormat(
DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.US));
itsNatConfig.setDefaultNumberFormat(NumberFormat.getInstance(Locale.US));
itsNatConfig.setEventDispatcherMaxWait(0);
itsNatConfig.setAJAXEnabled(true);
itsNatConfig.setScriptingEnabled(true);
itsNatConfig.setUsePatternMarkupToRender(false);
itsNatConfig.setAutoCleanEventListeners(true);
ItsNatServletContext itsNatCtx = itsNatConfig.getItsNatServletContext();
itsNatCtx.setMaxOpenDocumentsBySession(-1);
// テンプレートの登録
String pathPrefix = getServletContext().getRealPath("/");
pathPrefix += "WEB-INF/pages/manual/";
ItsNatDocumentTemplate docTemplate;
docTemplate = itsNatServlet.registerItsNatDocumentTemplate(
"manual.core.example","text/html", pathPrefix + "sample.html");
// リスナの登録
docTemplate.addItsNatServletRequestListener(new SampleListener());
}
}
サーブレットで登録しているHTMLの内容はリスト2の通りだ。NetBeans上では/itsnat/Webページ/WEB-INF/pages/manualの配下にsample.htmlとして作成しておく。
リスト2:sample.html
<html>
<head>
<title>ItsNatのサンプル</title>
</head>
<body>
<div itsnat:nocache="true" xmlns:itsnat="http://itsnat.org/itsnat">
お名前をどうぞ:
<input type="text" id="name"/>
<input type="button" id="click" value="クリック!"/>
<div id="result"></div>
</div>
</body>
</html>
続いてリスト1の最後で登録しているリスナのソースコードを見てみよう(リスト3)。実際の処理はSampleProcessorに移譲していることがわかる。
リスト3:SampleListener.java
public class SampleListener implements ItsNatServletRequestListener {
public void processRequest(ItsNatServletRequest request,
ItsNatServletResponse response) {
ItsNatHTMLDocument itsNatDoc =
(ItsNatHTMLDocument) request.getItsNatDocument();
new SampleProcessor(itsNatDoc);
}
}
SampleProcessorのソースコードはリスト4の通りだ。テキストフィールドと結果表示用のdiv要素をあらかじめ取得しておき、ボタンのclickイベントにリスナを登録している。ボタンがクリックするとここで登録しているリスナのhandleEvent()メソッドが呼び出され、div要素にメッセージが挿入されるという仕組みだ。
リスト4:SampleProcessor.java
public class SampleProcessor {
private ItsNatHTMLDocument itsNatDoc;
private ItsNatHTMLInputText input;
private Element result;
public SampleProcessor(ItsNatHTMLDocument itsNatDoc) {
this.itsNatDoc = itsNatDoc;
// テキストフィールドを取得
this.input = (ItsNatHTMLInputText)
itsNatDoc.getItsNatComponentManager().addItsNatComponentById("name");
// 結果を表示するdiv要素を取得
this.result = itsNatDoc.getDocument().getElementById("result");
// ボタンクリック時に呼び出されるリスナを登録
Element element = itsNatDoc.getDocument().getElementById("click");
itsNatDoc.addEventListener((EventTarget) element, "click",
new EventListener() {
public void handleEvent(Event evt) {
// メッセージを挿入
result.setTextContent("こんにちは、" + input.getText() + "さん!");
}
}, false);
}
}
以上でアプリケーションは完成だ。プロジェクトを実行後、ブラウザからhttp://localhost:8080/itsnat/MyServlet?itsnat_doc_name=manual.core.example※1にアクセスして動作を確認してみよう。
※1 URLはサーブレットを/MyServletにマッピングしている場合。またitsnat_doc_nameパラメータにはサーブレット内でテンプレートを登録する際に指定したキーを指定する
クラスの関連や処理の流れは少々複雑だが、実質的な処理を行っているのはSampleProcessorだけなので、そこだけ見れば特に難しいことはないだろう。
ItsNatはサンプルで紹介した機能以外にもサーバサイドでの非同期処理、タイマー、COMET対応などAjaxアプリケーションを開発するための豊富な機能が用意されている。サーバサイドでDOMを活用するというやや風変りなフレームワークではあるものの、自由度が高くサーバーサイドでの複雑な処理にも対応可能だ。
ただし、冒頭でも述べた通り、ライセンスがGNU Affero General Public License v3 となっているため、採用にあたっては注意してほしい。
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
MINI、ロールスロイスにインスパイアされた最高級品質の特別仕様車を発売 [07:30 5/27] ライフ |
|
【連載】Japanglish、正しく言うならこうでしょう 第57回 gasoline stand(ガソリンスタンド) [07:00 5/27] キャリア |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第105回 今回のお題は…「regard A as B」 [07:00 5/27] キャリア |
|
【連載】出社前に。日常生活ですぐに使える! 英語クイズ 第224回 「キモ~イ」ってなんて言う? [07:00 5/27] キャリア |
|
ヤナセ、メルセデス・ベンツ販売60周年を記念するCクラスの特別仕様車発売 [07:00 5/27] ライフ |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。