JSP 和速度之间哪个更好 - 性能 - 易于使用 - 易于创建可重用组件 - 开源 3rd 方的可用性 - IDE 支持
8 回答
@Vartec:我不认为“视图与业务逻辑的严格分离”是jsp中不存在的速度特性。您可以在 jsp 中(或多或少)做业务逻辑,但完全不推荐。但我同意你关于语法的观点。
表现
JSP 被编译成 Java,所以我不认为速度更快。(我自己没有做过基准测试)
便于使用
对于设计师:velocity 对于程序员:(恕我直言)jsp,因为它更接近代码
易于创建可重用组件
JSP 有很多组件 Velocity 本身没有组件(不是面向组件的)
开源第 3 方的可用性
我见过比速度更多的项目使用 JSP 或 JSP 相关技术。也许是因为速度真的很低...... :-)
IDE 支持
jsp有很多工具。特别是 eclipse jboss 插件/工具套件有一个很好的 jsp 编辑器。
Velocity 的插件大多不是功能性的或非常基本的(如果你有语法高亮,你会很幸运)
更新 如果您现在正在寻找模板引擎,我建议您看看 thymeleaf。它相对于速度来说是相当轻量级的,可以用几行代码来模板化一些基于文本的模板,或者用作一个全功能的模板引擎,例如在 web 应用程序中。
速度优势:
- 视图与业务逻辑严格分离
- 图形设计师可以理解的简单语法
以下是关于 Freemarker,但比较可能仍然相关。
在这两种技术发展的这一点上,选择其中一种的主要原因似乎是:
- 您需要一些特定的东西,它在一个而不是另一个
- 您想阻止视图开发人员将 Java scriptlet 放入 JSP 页面
- 您的开发人员在其中一个方面比在另一个方面更舒服
似乎影响不大的原因:
- 速度。一个典型的 Java EE 应用程序中有很多层,它们的影响比视图渲染器可能花费的几毫秒或多或少要大得多。事实上,如果我的应用程序表现不佳,这可能是我要处理的最后一层。
- IDE 支持。JBoss Tools 提供了 Freemarker 编辑器,而 JSP 工具是众所周知的。
- 句法。由于 EL 和 JSTL,JSP 2 和 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 中,您不能对 pojo 层次结构进行运行时调度,并且所有内容都是静态类型的,这很痛苦。此外,如果您创建了许多 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 的优势遗漏了一些非常重要的事情:
- 视图与业务逻辑的严格分离(如上)
- 图形设计师可以理解的简单语法(如上)
- 紧凑的代码,稍后重新访问不是一场噩梦,请参阅 示例链接
- 非 servlet 容器部署意味着在任何地方都可以轻松部署
与 JSP 相比,最后两个确实使 Velocity 有用。
我不知道 Velocity 是否能够在各个方面与 JSP 竞争,但 Velocity 更快、更容易。如果是复杂的网页,Velocity 的效率会提高 35% 到 45%,它可能会降低,但仍然会提高 5%比JSP。
Velocity 更好 它适用于许多应用领域 它为模板设计者提供了一个简单、清晰的语法 它为开发者提供了一个简单的编程模型 由于模板和代码是分开的,您可以独立开发和维护它们 Velocity 引擎可以轻松集成到任何Java 应用程序环境,尤其是 servlets Velocity 使模板能够访问上下文中数据对象的任何公共方法