サーバーサイドJava超入門(4)
出典:日経ソフトウエア 2005年9月号
66ページより
(記事は執筆時の情報に基づいており、現在では異なる場合があります) 表示を行うHTMLの記述をサーブレットから分離する
これで,CartServletからカートの本体を切り離すことができました。しかし,CartServletにはまだもう一つ大きな問題が残っています。プログラムの中にWebページを表示するHTMLが埋め込まれている点です。 WebページをデザインするWebデザイナとWebサイトで動作するプログラムを開発するプログラマは,本来,別の職業です。しかし,HTMLがサーブレットのプログラムに埋め込まれていると,デザイナがWebのデザインを変更したい場合でも,プログラムのソースコードを変更しなければなりません。また,Webページのデザインを確認するのに,いちいちサーブレットを動作させる必要があります。 そこで威力を発揮するのがJSPです。適切な情報を表示するJSPを用意し,それをサーブレットから呼び出すようにすれば,サーブレットからHTMLを切り離すことができます。JSPに記述するJavaのプログラム・コードは必要最低限に抑えるようにします。あくまで「プログラムとHTMLの分離」が目的だからです。きちんと分離できれば,WebデザイナがJavaのプログラム・コードを意識する必要はなくなります。 では,JSPを利用するようにカートを改造していきましょう(sample5)。CartServletに加える変更をリスト10[拡大表示]に示しました。sample4のCartServletでは,amountという変数は累計の表示のためだけに使っていました。sample5では表示はJSPファイルにまかせるので,amountに関する記述は不要になります。HTMLを出力して表示を行っていた部分も変更します。このように記述することにより,JSPファイルである「CartJsp.jsp」が呼び出されます。 JSPファイルの内容をリスト11[拡大表示]に示しました。「<%@」と「%>」で囲まれた部分が,JSPファイルの処理方式を指示する「ディレクティブ」と呼ばれるものです。最初が,コンテント・タイプとエンコーディング方式を指定するpageディレクティブです*16。JSPファイルでは,HTMLのmetaタグを使ったコンテント・タイプの指定は無効なので,必ずこのように記述します。次のpageディレクティブで,カートの本体であるCartクラスをインポートしています。 Javaのプログラム・コードは「<%」と「%>」の間に記述します。リスト11では,セッション・オブジェクトからCartオブジェクトを取り出す1行だけを記述しています。「<%=」と「%>」の間に記述するのがJSPの式です。コードの評価結果をHTMLに挿入するために使います。ここでは,getAmountメソッドの実行結果である商品の累計をHTMLに挿入しています。 リスト11の全体をながめてみると,HTMLの構造がほとんど壊れていないことがわかります。JSPに特有の記述をコメント・アウトしたりダミーに置き換えることで,Webデザイナが通常のHTMLファイルとして扱うことが可能になります。 サーバーサイドJavaではMVCフレームワークが主流これで,ショッピング・カートの機能を三つの部品に分割できました。実は,これらの部品は「MVC」と呼ばれる構造を意識して分割しています(図8[拡大表示])。Mはビジネス・ロジックを記述する「Model」,Vは表示を担当する「View」,Cは全体の制御を行う「Controller」を表します。最終的にできあがったsample5は,CartオブジェクトがModel,CartJspがView,CartServletがControllerをそれぞれ担当しています。こうすることで,メンテナンスや機能の追加が容易になります。 現在のサーバーサイドJavaの開発では,MVC構造を採用するのは半ば「常識」です。ただ,MVC構造のアプリケーションを毎回,一から開発するのでは手間がかかります。そこで,MVC構造をあらかじめ規定したWebアプリケーション・フレームワークを使うのが一般的になっています。代表的なフレームワークがオープンソースのStrutsです*17。今日では,Javaを使った企業のWebアプリケーション開発ではStrutsを利用するのが主流です*18。
|