サーバサイドでJavaを利用するのに一番簡単なのはJSPをベースにした方式だと思われます。JSPはサーブレットとして生成されるので直接呼び出すことができます。これは、JSP に関する仕様でMVCモデル1として紹介された方式で、ブラウザからは処理に対応したJSPを呼び出します。JSPの中にスクリプトレットと呼ぶJavaのソースを記述することにより業務処理を記述します。
この方式では、呼び出されたJSPはモデルとなるJavaBeansを呼び出し必要となるデータを取得することになります。リクエストに対する処理が複雑または大量になればなるほどJSP ページに埋め込まれるJavaコード(スクリプトレット)の量が多くなります。また、画面の生成部分と制御の部分がJSPの中に記述されるため、MVCモデルにおいてViewとControlの部分が分かりにくくなってきます。
よりMVCモデルを意識した形態が、JSP仕様においてMVCモデル2と呼ばれる方式で、「コントローラ」と呼ばれるサーブレットにより業務処理を行い、JSPは画面の生成のみに使用する形態です。「コントローラ」の役割は、業務に必要な処理とモデルとなるJavaBeansの呼び出しを行い、業務処理後に画面を生成するJSPにフォワードします。この方式ではContorolとViewを分離することができ、業務処理部分と画面の表示部分を独立して作成可能となります。また、JSPにはスクリプトレットの記述が最小限で済むため、Javaの知識がなくてもHTMLの知識があれば作成可能となります。この方式の場合サーブレットとURLの関係をWeb.xmlに定義を行う必要があるので、サーブレットの数が多い場合や、サーブレットの追加による管理が煩雑になります。
上記のMVCモデル2タイプにおいて、「コントローラ」となるサーブレットを1つのみとする方式があります。
コントローラには各処理の共通機能(リクエストからのデータ所得、ログイン管理、エラー処理など)と実行クラスとJSPの呼出しのみとし、業務処理は業務用JavaBeansにより実行させます。
このようにすることにより、業務処理と画面処理の独立性を高めることができます。また、業務処理用のJavaBeansはサーブレットを継承しないため、再利用性を高めることもできます。
「Struts」や提供システムのフレームワークはこの方式を採用しており、「コントローラ」を実装しています。
業務処理を考察すると、JSPへ表示用のデータを提供や入力されたデータを処理する部分とデータの管理や状況の設定などの業務上の処理に分けることができます。これらの処理を1つのクラスで行うのではなく各々別のクラスで行う方が、クラスの独立性を高め、修正に強いシステムとなります。
提供しているシステム及びアプリケーションは左図のような構成をとっています。必ずしもこの分割方法が良いとは言えないところもありますが、サンプルの一つとして見ていただければと思います。
画面処理層 | 入力データのチェック、表示用データの編集などを行う |
---|---|
業務処理層 | データの整合性を保ったデータの保管および必要データの取得及び業務上の状況設定などを行う |
アクセス層 | データベースの接続及びデータベースへのアクセスを行う |
JSPを使用する利点の一つに、タグリブの存在があると思います。タグリブを利用することによりJSP内にスクリプトレットを記述する代わりに、カスタムタグを記述することにより同様の処理を行わせることができるようになります。カスタムタグを使用することでJSPではJavaのソースを記述する必要がなくなるため、見やすくまたJavaの知識がなくても記述が可能となります。
タグリブを利用するには、右図のように「web.xml」への<taglib>定義の記述、tldファイルの作成とHTMLでのtaglibの指定を行います。実行クラスは、TagSupportクラス, SimpleTagSupportクラスを継承して作ることができます。