【发布时间】:2011-03-11 06:14:19
【问题描述】:
我即将选择组织视图的方式(使用 spring-mvc,但这并不重要)
据我所知,有 6 个选项(尽管它们不是相互排斥的):
- 瓷砖
- 站点网格
- Freemarker
- 速度
<jsp:include><%@ include file="..">
Tiles和Sitemesh可以分组; Freemarker 和 Velocity 也可以。每个组中使用哪一个不是这个讨论的问题,有足够的问题和讨论。
This is an interesting read,但无法说服我使用磁贴。
我的问题是 - 这些框架提供了哪些无法通过 <@ include file=".."> 和 JSTL 正确完成的功能。要点(部分摘自文章):
-
包括部分页面,如页眉和页脚 - 没有区别:
<%@ include file="header.jsp" %>和
<tiles:insert page="header.jsp" /> 在标题中定义参数 - 如标题、元标记等。这非常重要,尤其是从 SEO 的角度来看。使用模板选项,您可以简单地定义每个页面应定义的占位符。但是,您可以在带有 JSTL 的 jsp 中使用
<c:set>(在包含页面中)和<c:out>(在包含页面中)布局重组 - 如果您想将面包屑移动到菜单上方,或者将登录框移动到另一个侧面板上方。如果页面包含(使用 jsp)没有很好地组织,在这种情况下您可能需要更改每个页面。但是如果你的布局不是太复杂,把常用的东西放在页眉/页脚里,那就没什么好担心的了。
通用组件和特定内容之间的耦合 - 我没有发现这个问题。如果您想重复使用某些片段,请将其移动到不包含任何页眉/页脚的页面,并在需要的地方包含它。
效率 -
<%@ include file="file.jsp" %>比其他任何东西都更有效,因为它只编译一次。所有其他选项都被解析/执行了很多次。复杂性 - 所有非 jsp 解决方案都需要额外的 xml 文件、额外的包含、预处理器配置等。这既是一条学习曲线,又会引入更多潜在的故障点。此外,它使支持和更改变得更加乏味 - 您必须检查许多文件/配置才能了解正在发生的事情。
占位符 - velocity/freemarker 提供的不仅仅是 JSTL 吗?在 JSTL 中放置占位符,并使用模型(由控制器放置在请求或会话范围内)来填充这些占位符。
所以,请说服我应该使用上述任何框架来代替/除了纯 JSP。
【问题讨论】:
-
我不确定如何比较它们,因为我使用 Stripes 布局模板已经有一段时间了,我发现它比普通的 JSP 好多 .我确实使用了一些 jsp:include 调用,但这些通常是相当特殊的情况。布局模板机制是一个非常方便和强大的工具。
-
是的,听说都是“方便又强大”,但没见过。我所看到的是不必要的复杂性和成堆的配置文件。 (我不是专门谈论条纹,而是总体而言)
-
我相信 jsp:include 非常有效 - 它编译为从包含 servlet 到包含的方法调用。与@include 相比,它生成的代码更少,甚至可以通过缓存效果提高性能。
-
StringTemplate 开发人员提出了我见过的最好的论点,这与rule of least power 非常相似
标签: java jsp velocity tiles freemarker