<?xml version="1.0" encoding="Shift_JIS"?>
<document>

  <properties>
    <author email="jon@latchkey.com">Jon S. Stevens</author>
    <title>You make the decision - Hosting</title>
    <translator>熊坂祐二</translator>
    <translator>高橋達男</translator>
    <original>ymtd/ymtd-hosting</original>
  </properties>

<body>

<section name="ホスティング">

<p>
いろんなタイプの人が Servlet エンジン上でページを用意し、
その中には HTML しか知らない人もいるような、
ホスティング環境 (つまり ISP や大企業での共有された開発環境) では、
JSP が最適です。その理由として挙げられるのは、JSP の HTML
ライクな構文を学ぶのはすごく簡単だということです。
</p>

<p>
これについても、実際に詳細まで見ていけば、
それほど良いものでないかも知れないことが明らかになります。
以下の Java コードについて考えてみましょう。
</p>

<source><![CDATA[
    Hashtable strings = new Hashtable();
    int i=0;
    while (true)
    {
        strings.put ("dead"+i, new StringBuffer(999999));
    }
]]></source>

<p>
ここで行っているのは、Hashtable を作成し、タイトな [無限] ループに入るというものです。
同時に、デフォルトで999999のサイズで新しい StringBuffer オブジェクトを作成します。
この結果、(ホスティングされたアプリケーションの全てで共有される) Java 仮想マシン内で
メモリリークが発生することになります。
</p>

<p>
メモリが全て消費されてしまうとすぐに、あらゆる同一ホストのアプリケーションは
恐怖の「OutOfMemoryError」を受け取るようになります。
これがなぜそれほどひどいことかについては、
<a href="./ymtd-error-handling.html">最初の方で</a>すでに説明しました。
本質的に、JSP ページ自身は OutOfMemoryError を捕捉できず、
突然 Servlet エンジン全体が使用不能になるのです。
これが全て、書き方の悪い数行の Java コードのせいなのです。
</p>

<p>
前にも述べたように、Java コードを JSP ページに入れることは考え方としては良くありません。
Servlet エンジンが使える ISP の ホスティングサービスを使っていて、
こうした行動で他の人がどれだけ迷惑を被るかなんて全く気にしない
中学生にこのことを言ってやってください。
</p>

<p>
Velocity ではこうした問題は起こりません。Velocity テンプレート言語 (VTL) には、
while ループは無いからです。Velocity での唯一のループ構造は、
有限の要素数の配列での #foreach ループだけです。
また、#foreach 指示子を使用不可にしたり、再帰的なネストの回数を制限することも可能です。
注意: #while 指示子をテンプレート言語に追加するように、
Velocity が変更される可能性はあります。
</p>
<p>
JSP や Struts では、ページに Java コードを埋め込むのを防ぐことはできません。
</p>

<p>
[どちらを選ぶかは] あなたが判断してください。
</p>

<p>
<strong>[ <a href="ymtd-implementation.html">実装</a> &lt;- 前 | 
    次 -&gt; <a href="./ymtd-conclusion.html">結論</a> ]
</strong></p>

</section>

</body>
</document>
