Я думаю, что важно отметить, что по сравнению с JSP / ASP.NET в качестве механизма шаблонов, Velocity / NVelocity действительно «поддерживает» разделение проблем.
При использовании <% ..%> JSP / ASP.NET разрешен любой код Java / .NET. Вот почему иногда вы видите код бизнес-логики в этих файлах.
С Velocity / NVelocity вы не можете вставлять длинные серии кода. Вместо этого вы действительно вынуждены передавать вычисленные значения, которые Velocity / NVelocity берет и отображает в соответствии с тем, как разработан шаблон.
Еще один момент заключается в том, что они могут работать вне среды веб-контейнера (по крайней мере, Velocity может AFAIK). Представьте, что вы разработали шаблон отчета с JSP / ASP.NET. Он отлично работает из Интернета. И затем внезапно появляется запрос на изменение, чтобы сделать это из настольного приложения. Вместо того, чтобы встраивать в него веб-контейнер, вы можете инициализировать Velocity / NVelocity, вычислить значения и визуализировать шаблон.