JSPにロジックを埋め込む場合は
<% String foo = "Foo"; %>
のようになって、タグリブの場合は
<bean:write name="foo" />
のようになりますが、JSPはそれぞれのタグの空間だけがプログラムとみなされるので、行末の改行は通常の出力とみなされレスポンスされます。
この改行の出力によって、タグリブを頻繁に使う場合ではレスポンスの容量を増やしてしまします。具体的な例で言うと
<% for (int i = 0; i < 5; i++) { %> <%-- print foo --%> <bean:write name="foo" /> <% } %>
の出力結果は
foo foo foo foo foo
のようになります。判り難いですが、改行のみならずインデントに使ったTABやスペースも出力されるので、ループが多い場合は無駄な出力が多くなります。特にコメント(<%-- --%>)に対するインデント文字と改行が出力されるのは望ましいとは言えません。
出力を綺麗にしようとすると
<% for (int i = 0; i < 5; i++) { // print foo %><bean:write name="foo" /><% } %>
というように改行コードやインデントがJSPタグ内部に納まるようにコーディングする必要があります。ですが、あまり可読性に優れないですし、そもそも見た目にカッコ悪いです。
因みにPHPの場合は閉じタグ後の改行を無視します。
<?php print "foo" ?> <?php print "foo" ?> <?php print "foo" ?>
このようなプログラムの出力は純粋に
foofoofoo
となります。
最近のプログラミングの傾向としては、細かいパフォーマンスは気にせず汎用的で理解しやすいコードを書く方が望ましいのですが、無駄なトラフィックが増加するのは避けたいものです。
逆にPHPのような仕様では困るような場面があるのでしょうか。仕様としてはJSPの方が確かに順当だとは思いますが。