では、簡単な例からはじめましょう。ここで示す例は正しい設計の
基礎にさえも触れません。
しかし、それでも良い例にはなります。なぜなら、多くの場合、
正しい設計は単純な例を示すのより難しいからです。
このエッセイではさらに良い例を示して行こうと思います。
最初の例では、JSP と Velocity を使って、
まったく同じことを行う2つの異なるアプローチを示します。
これは、JSP でパラメータを出力する例です。
 |
 |
 |
 |
<html>
<head><title>Hello</title></head>
<body>
<h1>
<%
if (request.getParameter("name") == null) {
out.println("Hello World");
}
else {
out.println("Hello, " + request.getParameter("name"));
}
%>
</h1>
</body></html> |
 |
 |
 |
 |
これは、Velocityで同じことをする例です。
 |
 |
 |
 |
<html>
<head><title>Hello</title></head>
<body>
<h1>
#if ($request.getParameter("name") == null)
Hello World
#else
Hello, $request.getParameter("name")
#end
</h1>
</body></html> |
 |
 |
 |
 |
[ この2つの画面ショットで示しているのは、JSPを使うと、
コードがやっていることをブラウザでは簡単に見ることができないということです。 ]
この2つの方法の主な違いは、出力の実行方法です。
JSPでは、<% %>タグ内に「コード」を
埋め込む必要があるのに対し、Velocityでは、そうする必要がありません。
埋め込まれたコードの長所 (そして、短所) は、
ファイルがそのままブラウザにロードされるとき、
ページ内のJSPコードが表示されないということです。
一方で、コードを表示して欲しいと思う場合もあるかもしれません
(例えば、デバッグの時とか)。
JSPのもう一つの問題は、この最も基本的な例でさえ、MVC (Model-View-Controller)
パラダイム全体がすでに破壊されはじめていることです。
というのは、Javaコード内に HTML コードを埋め込むのは、
後でアプリケーションのルック&フィールを変えにくくなるため、
設計としてはよくないからです。
また、この場合、ページの View (つまり HTML) 表示は Model と
Controller から切り離すという、MVC 分離という概念が破壊されています。
例えば、「Hello」という語だけを強調したい場合、
out.println()ステートメントに
<b></b>タグを埋め込む必要があるでしょう。
もちろん、事情通なら、以下のように JSP を書くことを勧めるでしょう。
 |
 |
 |
 |
<html>
<head><title>Hello</title></head>
<body>
<h1>
<% if (request.getParameter("name") == null) %>
Hello World
<% else %>
Hello, <% request.getParameter("name"); %>
</h1>
</body></html> |
 |
 |
 |
 |
または Struts なら以下のようになるでしょう。
 |
 |
 |
 |
<html>
<head><title>Hello</title></head>
<body>
<h1>
<logic:notPresent parameter="name">
Hello World
</logic:notPresent>
<logic:present parameter="name">
<bean:parameter id="name" name="name"/>
Hello, <bean:write name="name"/>
</logic:present>
</h1>
</body></html>
|
 |
 |
 |
 |
[ これは、上記の例を直接ブラウザにロードしたときの新しいJSPのスクリーンショットです。 ]
ここで主張したいことは、JSP を「純粋に」するためには厳しい試練を受けなければならない
ということです。
上記の例は、Velocity の例と同じように見えます。しかし、JSP では、ここでも
至る所に必要な<% %>タグを埋め込む必要があります。
「==」をタイプすることが増えると、間違いの可能性も増えるのです!
また、「;」を加える必要があるのとそうでないのとでは、ささいですが違っています。
Velocity でのルールは、[単純に言えば] 指示子の前には「#」をつけ、
コンテキストのメンバーの前には「$」をつけるというもの[だけ] です。
すぐ上の例のイメージからお分かりの通り、表示されたページでは [最初の例に比べると]
表示されている情報が増えていますが、
ページを構築するのに使われるロジックはまったく抜けています。
もし同じ表示を行う Velocity のテンプレートをブラウザで直接見ると、
最初にテンプレート処理がされなければ、テンプレートのロジックはすべて見ることができます。
その利点はデバッグするのが容易であるということです。
[どちらを選ぶかは] あなたが判断してください。
[ Home <- 前 |
次 -> 生成? ]