2.Front Controller パターン
J2EEパターン 2章 Front Controller パターン
2.1 Front Controller パターンとはFront Controller パターンとはどういうものか、目的、概要、構造とわけて説明していきます。 目的クライアントがWebアプリケーションを利用するとき、もしクライアントが直接ビューにアクセスすることになると、 各ビューごとにリクエストを制御しなくてはなりません。そうすると、リクエストの制御が各ビューに分散してしまい、 リクエストを制御するためのソースコードも、各ビューに重複して記述することになってしまいます。
これらの共通する処理をそれぞれのリソースでコーディングすると、同じコードを何度も記述しなければならず、 無駄な作業が必要となります。また、共通部分がコピーアンドペーストで作成されたりすると、 共通する処理内容や処理方法などに修正・変更が必要となった場合、 その処理を行っているリソースすべてを変更しなければならず、 保守性の低いアプリケーションになってしまいます。 この問題を解決するために考えられたのが、Front Controller パターンです。 概要Webリクエストを集中して管理する「フロントコントローラ」を使用し、 認証や権限付与、ビューの選択、エラー処理などを行います。 構造Front Controller パターンの構造は、大まかには以下のようになります。
Helper と View については、特に重要ではありません。Front Controller パターンの肝になるのは、 Controller と Dispatcher をあわせた「フロントコントローラ」の部分です。 2.2 メリットFront Controller パターンには次のようなメリットがあります。
2.3 実装例Struts における、org.apache.struts.action.ActionServlet(以下 ActionServlet) ,
org.apache.struts.action.RequestProcessor(以下 RequestProcessor) は、Front Controller の「フロントコントローラ」を担うものです。
Action は、MVC モデルでは、コントローラに分類されますが「フロントコントローラ」ではありません。 Action は、全ての Web リクエストに対して処理を行うものではないからです。 RequestProcessor の processActionPerform メソッドのソースは、以下のようになっています。
processActionPerform(HttpServletRequest request,
HttpServletResponse response,
Action action,
ActionForm form,
ActionMapping mapping)
throws IOException, ServletException {
try {
return (action.execute(mapping, form, request, response));
} catch (Exception e) {
return (processException(request, response,
e, form, mapping));
}
}
このメソッドをオーバーライドすることで、全てのリクエストに対して共通の処理を行うことができるようになります。
processActionPerform(HttpServletRequest request,
HttpServletResponse response,
Action action,
ActionForm form,
ActionMapping mapping)
throws IOException, ServletException {
try {
// 認証処理
ActionForward forward = action.execute(mapping, form, request, response));
// 権限の付与
return forward;
} catch (Exception e) {
return (processException(request, response,
e, form, mapping));
}
}
2.4 まとめ全ての Web リクエストに対して「共通の処理」を一元化した場合に利用します。 Front Controller パターンでは、全ての Web リクエストが通過するコントローラを用意することで、 このような一元管理を可能にしています。 |
![]()
![]()
|