JSP和Velocity哪个更好?

34

JSP和Velocity在以下几个方面哪一个更好: - 性能 - 使用便捷性 - 创建可重复使用组件的易用性 - 开源第三方库的可用性 - IDE支持

8个回答

44

@Vartec: 我认为“将视图与业务逻辑分离”不是Velocity特有的功能,JSP也可以完成业务逻辑(或多或少),但这并不被推荐。但我同意你的观点,即语法问题。

性能

JSP编译成Java,所以我不认为velocity更快。(我自己没有进行基准测试)

易用性

对于设计师:velocity 对于程序员:(在我看来)jsp,因为它更接近代码

创建可重复使用组件的易用性

JSP有很多组件 Velocity本身没有组件(非组件导向)

第三方开源软件的可用性

我见过使用JSP或JSP相关技术的项目比velocity多得多。可能是因为velocity真的太低级了... :-)

IDE支持

有很多jsp工具。特别是Eclipse JBoss插件/工具套件有一个很好的jsp编辑器。

Velocity的插件大多无法正常工作或非常基础(如果有语法高亮,则会有一些幸运)

更新 如果您现在正在寻找模板引擎,我建议您看看thymeleaf。它与velocity相比相对较轻,并且可以仅使用几行代码来模板化一些基于文本的模板,也可以作为完整功能的模板引擎在Web应用程序中使用。


19

Velocity 的优点:

  • 严格将视图与业务逻辑分离
  • 简单的语法,可被图形设计师理解

11

以下内容是关于Freemarker的,但比较可能仍然相关。

在这两种技术的发展中,选择一个而不是另一个的主要原因似乎有:

  1. 有些特定需求只有其中一种技术支持
  2. 防止视图开发人员将Java脚本片段放入JSP页面
  3. 你的开发人员更喜欢其中一种技术

似乎并没有太大影响的原因:

  1. 速度。在典型的Java EE应用程序中,有许多层次比视图渲染器更有影响力。实际上,如果我的应用程序表现不佳,这可能是我最后解决的问题。
  2. IDE支持。JBoss Tools提供了一个Freemarker编辑器,而JSP工具也很出名。
  3. 语法。由于EL和JSTL的存在,JSP 2和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>

8

使用Velocity或者更好的FreeMarker来处理IT技术相关内容。在JSP中,您无法进行运行时分配POJO层次结构,而且所有内容都是静态类型的,这很麻烦。此外,如果您创建了许多JSP2.0自定义标签(超过100-150个),那么由于Jasper解析依赖项的低效率,您的开发-部署周期将会严重减慢。

另一方面,JSP具有良好的工具支持。

JSP编译缓慢的参考文献:

http://www.mailinglistarchive.com/users@tomcat.apache.org/msg10786.html

http://marc.info/?l=tomcat-dev&m=119377083422720&w=2


我一直想知道为什么Freemarker被认为比Velocity更好 - 对我来说,它们似乎完全做同样的事情!我以前没有使用过Velocity,但我看到过一些相关内容。我用过Freemarker,我必须说它非常容易使用。但是我预计Velocity会类似,因此我感到疑惑。 - Chii
2
FreeMarker更高级,可以比Velocity更深入地进行操作,伴随着强大的功能带来了巨大的责任;)http://freemarker.org/fmVsVel.html - cherouvim

3
我将专注于使用模板引擎,因为这是我最有经验的。根据你真正想要做什么而定。Servlet与Velocity(或FreeMarker)相结合可提供非常好的逻辑和表现分离。模板更难测试,因为您需要评估模板才能判断输出格式(例如HTML等)是否正确。对于JSP,这可以在您选择的IDE中完成。模板的一个巨大优势是您可以完全将其存储在应用程序之外,甚至可以在应用程序运行时更新它们。这是使用JSP稍微有些困难,尽管热部署非常接近。通过使用模板引擎的包含功能,可以创建可重复使用的组件。

1
以上所述的Velocity的优点在工程师的角度上缺少一些非常重要的东西:
- 严格将视图与业务逻辑分离(如上所述) - 简单的语法,可以被图形设计师理解(如上所述) - 紧凑的代码,以后重访时不会像噩梦一样,详见示例链接 - 非servlet容器部署意味着可以轻松地在任何地方部署
这最后两个因素使得Velocity相对于JSP非常有用。

0

Velocity更好 它适应许多应用领域 它为模板设计人员提供了简单明了的语法 它为开发人员提供了简单的编程模型 由于模板和代码分离,您可以独立开发和维护它们 Velocity引擎轻松集成到任何Java应用程序环境中,特别是servlets Velocity使模板能够访问上下文中数据对象的任何公共方法


0
我不确定Velocity是否能够在所有方面与JSP竞争,但Velocity更快、更容易。Velocity的效率比JSP高35%至45%,如果是复杂的网页可能会降低,但仍然比JSP高5%。

4
如果你的意思是Velocity使用起来更快,那没问题,但是Velocity并不比JSP更快。Velocity会将HTML字符串与数据合并,而JSP则直接将HTML发送到writer中。如果在Velocity的mergeTemplate调用周围添加日志记录时间,你就会明白我的意思了。 - sproketboy
3
无论如何,都需要证据!我们需要数字、图表、基准!;) - rustyx
需要证明你的断言。另外,要比jsp更好的速度的确切方面是什么?效率方面的什么?你所说的复杂网页是什么意思?你是如何得到那5%的?在撰写此评论时,这真的是一个不负责任的回答。 - le0diaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接