JSP和Velocity在以下几个方面哪一个更好: - 性能 - 使用便捷性 - 创建可重复使用组件的易用性 - 开源第三方库的可用性 - IDE支持
@Vartec: 我认为“将视图与业务逻辑分离”不是Velocity特有的功能,JSP也可以完成业务逻辑(或多或少),但这并不被推荐。但我同意你的观点,即语法问题。
性能
JSP编译成Java,所以我不认为velocity更快。(我自己没有进行基准测试)
易用性
对于设计师:velocity 对于程序员:(在我看来)jsp,因为它更接近代码
创建可重复使用组件的易用性
JSP有很多组件 Velocity本身没有组件(非组件导向)
第三方开源软件的可用性
我见过使用JSP或JSP相关技术的项目比velocity多得多。可能是因为velocity真的太低级了... :-)
IDE支持
有很多jsp工具。特别是Eclipse JBoss插件/工具套件有一个很好的jsp编辑器。
Velocity的插件大多无法正常工作或非常基础(如果有语法高亮,则会有一些幸运)
更新 如果您现在正在寻找模板引擎,我建议您看看thymeleaf。它与velocity相比相对较轻,并且可以仅使用几行代码来模板化一些基于文本的模板,也可以作为完整功能的模板引擎在Web应用程序中使用。
Velocity 的优点:
以下内容是关于Freemarker的,但比较可能仍然相关。
在这两种技术的发展中,选择一个而不是另一个的主要原因似乎有:
似乎并没有太大影响的原因:
Freemarker示例:
<#list foos as foo>
<tr>
<td>${foo.field1}</td>
<td>${foo.field2}</td>
<td>
<#list foo.childObjects as child>
<#if child.name == 'bar'>
${child.value}
</#if>
</#list>
</td>
</tr>
</#list>
JSP-EL-JSTL的实例:
<c:forEach items="${foos}" var="foo">
<tr>
<td>${foo.field1}</td>
<td>${foo.field2}</td>
<td>
<c:forEach items="${foo.childObjects}" var="child">
<c:if test="${child.name == 'bar'}">
${child.value}
</c:if>
</c:if>
</td>
</tr>
</c:forEach>
使用Velocity或者更好的FreeMarker来处理IT技术相关内容。在JSP中,您无法进行运行时分配POJO层次结构,而且所有内容都是静态类型的,这很麻烦。此外,如果您创建了许多JSP2.0自定义标签(超过100-150个),那么由于Jasper解析依赖项的低效率,您的开发-部署周期将会严重减慢。
另一方面,JSP具有良好的工具支持。
JSP编译缓慢的参考文献:
http://www.mailinglistarchive.com/users@tomcat.apache.org/msg10786.html
Velocity更好 它适应许多应用领域 它为模板设计人员提供了简单明了的语法 它为开发人员提供了简单的编程模型 由于模板和代码分离,您可以独立开发和维护它们 Velocity引擎轻松集成到任何Java应用程序环境中,特别是servlets Velocity使模板能够访问上下文中数据对象的任何公共方法