Velocity

Velocityについて

コミュニティ

ドキュメント

ツール

比較

日本語訳について

Saying Hello

では、簡単な例からはじめましょう。 ここで示す例は正しい設計にもとづくものではありませんが、 それでも良い例にはなります。 なぜなら多くの場合、正しい設計を行うことは単純な例を示すのより難しいからです。 このエッセイではさらに良い例を示して行こうと思います。

最初の例では、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ではそうする必要がありません。 単に Velocity Template Language (VTL) を使って、 テンプレートに直接書き込むだけです。

ファイルがそのままブラウザにロードされるときに ページ内の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 のテンプレートをブラウザで直接見ると、 最初にテンプレート処理がされなければ、テンプレートのロジックはすべて見ることができます。 その利点はデバッグするのが容易であるということです。

[どちらを選ぶかは] あなたが判断してください。

[ YMTDトップ <- 前 | 次 -> 生成? ]



このドキュメントは、 熊坂祐二 、 高橋達男 、 羽生田恒永 が訳しました。
コメントがある場合は、 report@jajakarta.org までお願いします。
オリジナル英文 Copyright © 1999-2005, The Apache Software Foundation