【发布时间】:2010-10-11 05:42:04
【问题描述】:
JSP 和velocity 之间哪个更好 - 表现 - 便于使用 - 易于创建可重用的组件 - 开源第 3 方的可用性 - IDE 支持
【问题讨论】:
JSP 和velocity 之间哪个更好 - 表现 - 便于使用 - 易于创建可重用的组件 - 开源第 3 方的可用性 - IDE 支持
【问题讨论】:
@Vartec: 我不认为“视图与业务逻辑的严格分离”是 jsp 中不存在的速度特性。您可以在 jsp 中(或多或少)做业务逻辑,但完全不推荐。但我同意你关于语法的观点。
性能
JSP 被编译成 Java,所以我不认为速度更快。 (我自己没有做过基准测试)
易于使用
对于设计师:速度 对于程序员:(恕我直言)jsp,因为它更接近代码
易于创建可重用组件
JSP 有很多组件 Velocity 本身没有组件(不是面向组件的)
开源第三方的可用性
我见过比速度更多的项目使用 JSP 或 JSP 相关技术。也许是因为速度真的很低...... :-)
IDE 支持
jsp 有很多工具。尤其是eclipse jboss插件/工具套件,jsp编辑器不错。
Velocity 插件大多不是功能性的或非常基本的(如果你有语法高亮,你会很幸运)
更新 如果您现在正在寻找模板引擎,我建议您看看 thymeleaf。它相对于速度来说是相当轻量级的,可以用几行代码来模板化一些基于文本的模板,或者用作一个全功能的模板引擎,例如在 web 应用程序中。
【讨论】:
速度的优势:
【讨论】:
以下是关于 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>
【讨论】:
速度甚至更好FreeMarker。 在 JSP 中,您不能拥有 runtime dispatch for pojo hierarchies,并且所有内容都是静态类型的,这很痛苦。此外,如果您创建了许多 JSP2.0 自定义标签(比如超过 100-150 个),那么由于 Jasper 无法有效地解决依赖关系,您的开发-部署周期将大大减慢。
另一方面,JSP 有很好的工具支持。
慢速JSP编译参考:
http://www.mailinglistarchive.com/users@tomcat.apache.org/msg10786.html
【讨论】:
我将专注于使用模板引擎,因为这是我最有经验的。
这取决于你真正想做什么。 Servlet 与 Velocity(或 FreeMarker)的结合提供了很好的逻辑和表示分离。模板更难测试,因为您需要评估模板才能判断 HTML(或其他任何输出格式)是否正确。对于 JSP,这可以在您选择的 IDE 中完成。
模板的一大优势是您可以将它们完全存储在应用程序之外,甚至可以在应用程序运行时更新它们。尽管热部署非常接近,但使用 JSP 实现这一点有点困难。
使用模板引擎的包含功能可以创建可重用的组件。
【讨论】:
上述 Velocity 的优势从工程师的角度来看,遗漏了一些非常重要的事情:
与 JSP 相比,最后两个确实使 Velocity 有用。
【讨论】:
我不知道 Velocity 是否能够在各个方面与 JSP 竞争,但 Velocity 更快、更容易。如果是复杂的网页,Velocity 的效率要高出 35% 到 45%,它可能会降低,但仍然如此比 JSP 多 5%。
【讨论】:
速度更好 它适用于许多应用领域 它为模板设计者提供了一个简单、清晰的语法 它为开发人员提供了一个简单的编程模型 因为模板和代码是分开的,所以可以独立开发和维护 Velocity 引擎可以轻松集成到任何 Java 应用程序环境中,尤其是 servlet Velocity 使模板能够访问上下文中数据对象的任何公共方法
【讨论】: