2.1. アーキテクチャ概要

Nablarchでは、HTMLをベースとした画面UIを持つウェブアプリケーションを構築するための機能を提供している。

2.1.1. ウェブアプリケーションの構成

Nablarchではウェブアプリケーションを構築する場合、ServletAPIの使用を前提としている。 以下にNablarchにおけるウェブアプリケーションの構成を示す。

../../../_images/application_structure1.png
Nablarchサーブレットコンテキスト初期化リスナ (NablarchServletContextListener)
システムリポジトリやログの初期化処理を行うサーブレットコンテキストリスナ。
Webフロントコントローラ (WebFrontController)
受け取ったリクエストに対する処理をハンドラキューに委譲するサーブレットフィルタ。

2.1.2. ウェブアプリケーションの処理の流れ

ウェブアプリケーションがリクエストを処理し、レスポンスを返却するまでの処理の流れを以下に示す。

../../../_images/web-design.png
  1. Webフロントコントローラ ( javax.servlet.Filter の実装クラス)がrequestを受信する。
  2. Webフロントコントローラ は、requestに対する処理をハンドラキュー(handler queue)に委譲する。
  3. ハンドラキューに設定されたディスパッチハンドラ(DispatchHandler) が、URIを元に処理すべきaction classを特定しハンドラキューの末尾に追加する。
  4. アクションクラス(action class)は、フォームクラス(form class)やエンティティクラス(entity class)を使用して業務ロジック(business logic) を実行する。 各クラスの詳細は、 アプリケーションの責務配置 を参照。
  5. action classは、処理結果を示す HttpResponse を作成し返却する。
  6. ハンドラキュー内のHTTPレスポンスハンドラ(HttpResponseHandler)が、 HttpResponse をクライアントに返却するレスポンスに変換する。例えば、JSPのServlet Forwardなど。
  7. responseが返却される。

2.1.3. ウェブアプリケーションで使用するハンドラ

Nablarchでは、ウェブアプリケーションを構築するために必要なハンドラを標準で幾つか提供している。 プロジェクトの要件に従い、ハンドラキューを構築すること。(要件によっては、プロジェクトカスタムなハンドラを作成することになる)

各ハンドラの詳細は、リンク先を参照すること。

リクエストやレスポンスの変換を行うハンドラ
リクエストのフィルタリングを行うハンドラ
データベースに関連するハンドラ
エラー処理に関するハンドラ
その他

2.1.3.1. 最小ハンドラ構成

Nablarchでウェブアプリケーションを構築する際の、必要最小限のハンドラキューを以下に示す。 これをベースに、プロジェクト要件に従ってNablarchの標準ハンドラやプロジェクトで作成したカスタムハンドラの追加を行う。

最小ハンドラ構成
No. ハンドラ 往路処理 復路処理 例外処理
1 HTTP文字エンコード制御ハンドラ リクエストとレスポンスに文字エンコーディングを設定する。    
2 グローバルエラーハンドラ     実行時例外、またはエラーの場合、ログ出力を行う。
3 HTTPレスポンスハンドラ   サーブレットフォーワード、リダイレクト、レスポンス書き込みのいずれかを行う。 実行時例外、またはエラーの場合、既定のエラーページを表示する。
4 セキュアハンドラ   レスポンスオブジェクト(HttpResponse)にセキュリティ関連のレスポンスヘッダを設定する。  
5 マルチパートリクエストハンドラ リクエストがマルチパート形式の場合、その内容を一時ファイルに保存する。 保存した一時ファイルを削除する。  
6 セッション変数保存ハンドラ セッションストアから内容を読み込む。 セッションストアに内容を書き込む。  
7 ノーマライズハンドラ リクエストパラメータのノーマライズ処理を行う。    
8 内部フォーワードハンドラ   遷移先が内部フォーワードの場合、後続のハンドラを再実行する。  
9 HTTPエラー制御ハンドラ     例外の種類に応じたログ出力とレスポンスの生成を行う。
10 Nablarchカスタムタグ制御ハンドラ Nablarchカスタムタグの動作に必要な事前処理を行う。    
11 データベース接続管理ハンドラ DB接続を取得する。 DB接続を解放する。  
12 トランザクション制御ハンドラ トランザクションを開始する。 トランザクションをコミットする。 トランザクションをロールバックする。
13 ルーティングアダプタ リクエストパスをもとに呼び出すアクションを決定する。