我即将选择一种组织视图的方式(使用spring-mvc,但这并不重要)。
据我所知,有6个选项(虽然它们并不是互斥的):
- Tiles
- Sitemesh
- Freemarker
- Velocity
<jsp:include>
<%@ include file="..">
Tiles和Sitemesh可以分为一组;同样,Freemarker和Velocity也可以分为一组。在每个组中使用哪个取决于情况,并不是本讨论的问题,关于这个问题已经有足够的问题和讨论了。
这篇文章很有趣,但并不能使我完全相信使用tiles。
我的问题是:这些框架提供了什么功能,而<@ include file="..">
和JSTL无法胜任?主要观点(其中一些摘自文章):
包括页面的部分,例如页眉和页脚 - 这没有什么区别:
<%@ include file="header.jsp" %>
和
<tiles:insert page="header.jsp" />
在头部定义参数 - 如标题、元标签等,这非常重要,尤其是从SEO的角度来看。使用模板选项,您可以简单地定义每个页面应该定义的占位符。但是,您也可以在jsp中使用JSTL,使用
<c:set>
(在包含页面中)和<c:out>
(在被包含的页面中)。布局重组 - 如果您想将面包屑移到菜单上方,或者将登录框移到另一个侧边栏上方。如果页面包含(使用jsp)没有很好地组织,您可能需要更改每个单独的页面。但是,如果您的布局不是过于复杂,并且将常见的东西放在页眉/页脚中,就没有什么可担心的。
通用组件和特定内容之间的耦合 - 我认为这没有问题。如果您想重用某个片段,请将其移动到不包含任何页眉/页脚的页面中,并在需要时进行包含。
效率 -
<%@ include file="file.jsp" %>
比其他任何东西都更有效,因为它只编译一次。所有其他选项都会被解析/执行多次。复杂性 - 所有非jsp解决方案都需要额外的xml文件、额外的包含、预处理器配置等。这既是一个学习曲线,也引入了更多的潜在故障点。此外,它使支持和更改更加繁琐-您必须检查许多文件/配置才能理解发生了什么。
占位符 - 与JSTL相比,velocity/freemarker提供了更多功能吗?在JSTL中,您放置占位符,并使用模型(由控制器放置在请求或会话范围内)填充这些占位符。
因此,说服我使用上述框架之一来代替/补充纯JSP。