サーブレット/JSPの役割を理解する:基礎から学ぶサーブレット/JSP(1)(3/4 ページ)
本連載では、JSP&サーブレットをシステムデザインという観点からご紹介していくことにします。基本的な構文から、JSP/サーブレット/JavaBeansを適所適時に使い分けていく考え方、そして「必然性」までを実践的な見地から体感していただければ幸いです。
JavaBeansの役割
JavaBeansが先の2技術と異なる点とは、サーブレット・JSPがいずれも「サーバサイドでの用途」を前提とした技術であるのに対し、JavaBeansは必ずしも「サーバサイド用途」に限られた技術ではないという点です。
JavaBeansは再利用することを目的として作成された(ということは、汎用的なロジックを実装した)Javaクラスです。それ自体が直接にクライアントから呼び出されることはありません。
サーブレット、あるいはJSPから呼び出されることによって、データベースへの検索や更新、ファイル処理などのあらかじめ定められた「比較的、汎用的な」ビジネスロジックの処理を行い、必要に応じて処理結果を返す、それは部品でもあります。
リスト3は、JSPやサーブレットから呼び出され、パラメータとして渡された人名に対して、「Hello,日尾君」のようなメッセージを返す、極めてシンプルなJavaBeansクラスの例です。
package beanPackage; import java.io.*; public class BeanHello implements Serializable { static public String getHello(String strVal) { return "<p>Hello, " + strVal + "</p>"; } }
このJavaBeansは、例えば、JSPからであれば、
<% BeanHello objHlo=new BeanHello(); out.println(objHlo.getHello("日尾")); %>
のように呼び出すことが可能です。
JavaBeansを用いることで、例えば、メール発信という機能を例に取ってみた場合、フォームから入力された内容そのままをメール発信するときも、決められたフォーマットで整形してメール発信を行うときも、わざわざ2つのプログラムを組む必要はなく、メール発信JavaBeansを1つ用意しておけばよいことになります。あとは、メール本文や配信先など可変の部分のみをJSPやサーブレットの側からパラメータとして渡してやるだけで、簡単にメール発信ロジックを実現することができるのです。
当然、なにかしらロジックに変更が生じた場合、例えば、添付ファイル機能を付加したい、特殊なメールヘッダを追加したい、などといった場合も、ロジック自体が1つに集約されていますから、対応は容易です。また、複数個所を修正することによる修正のモレや間違いというのも、そもそも元が1つなのですから、起こり得ません。
ただ、一方で、いかに複数個所で使いまわすことのできる独立した機能に分解できるか(するか)、といったシステムデザイン上の課題は新たに発生します。
手続き言語的に、一から順番に処理の流れを記述するならば、なんら再利用性やロジックの独立性などは気にする必要はありませんでした。常にその場その場で必要とされる最良のロジックにのみ気を使えば、それで事足りたのです。
しかし、部品化はそもそもの視点が異なります。部品化に際しては、(語弊を承知でいうならば)その場の最適解というよりも、アプリケーション全体としての最適を考慮する必要があります。
部品化とは必ずしも開発性を効率化するものではありません。いかに部品の独立性を高めるか、汎用的なしくみに合わせるかという意味ではむしろ設計段階に従来以上の工数を割く必要があります。また、局所的なコードの可読性という観点でも、部品化によってコードが分散するということは、むしろコードの見通しを悪くするものです。人間にとって、最も可読性の高い形態とは、実際には、最も原始的な手続き型言語であるにほかなりません。
にもかかわらず、部品化が重要であると声高に叫ばれる理由とは、ひとえに「保守性」というものが現在の開発体制においては大きな比重を占めているからです。ますますビジネスの変動が激しく、また複雑化する昨今、システムはメインフレーム時代のような固定的な(作って終わりの)ものではなくなりました。「変動を前提に」、常に変更していく――また、変更が可能であることが一義的に重要であるともいえます。つまり、昨今のシステムにおける開発性(プロダクティビティ)とは一次的な開発における開発性ではなく、より広義な改訂・保守までを含めた開発性であるといえます。そうした観点を含め、JavaBeansクラスの活用方法は、またあらためて後述することにします。
ちなみに、部品化の技術としては、広義では、このほかJSPで使用することのできる「カスタムタグ」や、リクエスト・レスポンスデータを処理する「フィルタ」、アプリケーションやセッションの開始・終了を制御する「リスナ(Listener)」などが用意されています。こちらについても、また順を追ってご紹介していくことにしましょう。
Copyright © ITmedia, Inc. All Rights Reserved.