Boz*_*zho 95 java jsp velocity freemarker tiles
我即将选择组织我的观点(使用spring-mvc,但这不应该太重要)
据我所知,有6个选项(尽管它们并不相互排斥):
<jsp:include>
<%@ include file="..">
Tiles和Sitemesh可以分组; 所以可以的Freemarker和速度.每个小组中使用哪一个不是这个讨论的问题,有足够的问题和讨论.
这是一个有趣的读物,但不能说服我使用瓷砖.
我的问题是 - 这些框架提供的内容 <@ include file="..">
与JSTL 无法正常完成.要点(一些来自文章):
包括部分页面,如页眉和页脚 - 之间没有区别:
<%@ include file="header.jsp" %>
Run Code Online (Sandbox Code Playgroud)
和
<tiles:insert page="header.jsp" />
Run Code Online (Sandbox Code Playgroud)在标题中定义参数 - 如标题,元标记等.这非常重要,尤其是从SEO的角度来看.使用模板选项,您只需定义每个页面应定义的占位符.但是你可以在jsp中使用JSTL,使用<c:set>
(在包含页面中)和<c:out>
(在包含的页面中)
布局重组 - 如果要在菜单上方移动面包屑,或在另一个侧面板上方移动登录框.如果页面包含(使用jsp)组织不当,则可能需要在这种情况下更改每个页面.但是如果你的布局不是太复杂,并且你把常见的东西放在页眉/页脚中,就没有什么可担心的了.
公共组件和特定内容之间的耦合 - 我没有发现这个问题.如果要重用某些片段,请将其移动到不包含任何页眉/页脚的页面,并在需要的地方包含它.
效率 - <%@ include file="file.jsp" %>
比其他任何东西都更有效,因为它被编译一次.所有其他选项都被解析/执行多次.
复杂性 - 所有非jsp解决方案都需要额外的xml文件,其他包括,预处理器配置等.这既是学习曲线又是引入更多潜在的失败点.此外,它使支持和更改变得更加乏味 - 您必须检查许多文件/配置以了解正在发生的事情.
占位符 - 速度/自由标记比JSTL更多吗?在JSTL中,您放置占位符,并使用模型(放置在请求或会话范围内,由控制器)来填充这些占位符.
所以,说服我除了普通的JSP之外我应该使用上面的任何框架而不是/.
mat*_*t b 17
Velocity的一些论据(我没有使用过Freemarker):
占位符 - 速度/自由制造者提供的东西比JSTL更多吗?在JSTL中,您放置占位符,并使用模型(放置在请求或会话范围内,由控制器)来填充这些占位符.
是的,引用确实是VTL的核心:
<b>Hello $username!</b>
Run Code Online (Sandbox Code Playgroud)
要么
#if($listFromModel.size() > 1)
You have many entries!
#end
Run Code Online (Sandbox Code Playgroud)
效率 -
<%@ include file="file.jsp" %>
比其他任何东西都更有效,因为它被编译一次.所有其他选项都被解析/执行多次.
不太确定我同意或理解这一点.Velocity有一个缓存模板的选项,这意味着它们被解析的抽象语法树将被缓存而不是每次从磁盘读取.无论哪种方式(我没有这方面的实数),Velocity 对我来说总是感觉很快.
布局重组 - 如果要在菜单上方移动面包屑,或在另一个侧面板上方移动登录框.如果页面包含(使用jsp)组织不当,则可能需要在这种情况下更改每个页面.但是如果你的布局不是太复杂,并且你把常见的东西放在页眉/页脚中,就没有什么可担心的了.
不同的是,使用JSP方法,您不会在使用相同页眉/页脚的每个JSP文件中重新组织此布局吗?Tiles和SiteMesh允许您指定基本布局页面(JSP,Velocity模板等 - 它们都是JSP框架),您可以在其中指定所需内容,然后委托主内容的"内容"片段/模板.这意味着只有一个文件可以移动标题.
moo*_*eds 12
之间的选择jsp:include
和瓷砖/ SiteMesh的/等之间的选择的简单性和功率,开发人员面临的所有时间.当然,如果您只有几个文件或者不希望您的布局经常更改,那么只需使用jstl
和jsp:include
.
但应用程序有一种逐步增长的方式,并且很难证明"停止新开发和改造瓷砖(或其他一些解决方案),以便我们可以更容易地解决未来的问题",如果你不使用一开始的复杂解决方案.
如果您确定您的应用程序将始终保持简单,或者您可以设置一些应用程序复杂性的基准,之后您将集成一个更复杂的解决方案,那么我建议不要使用tile/etc. 否则,从一开始就使用它.
我不会说服您使用其他技术。就我所知,如果对他们有用,那么每个人都应该坚持使用JSP。
我主要与Spring MVC合作,我发现JSP 2+与SiteMesh完美结合。
提供装饰器以应用于视图,就像其他模板引擎中的继承工程一样。如今,没有这种功能是无法想象的。
人们声称,JSP很难避免模板中的Java代码是虚假的。您只是不应该这样做,而使用此版本则没有必要这样做。版本2支持使用EL的调用方法,与以前的版本相比,这是一个很大的优势。
使用JSTL标签,您的代码仍将看起来像HTML,因此不太麻烦。Spring通过taglibs打包了对JSP的大量支持,这非常强大。
标签库也易于扩展,因此自定义您的环境非常容易。
反对使用 JSP 的 Facelets(不在您的列表中,但我只是提一下)的最佳论据之一是编译与解释器集成,而不是委托给 JSP 编译器。这意味着我在 JSF 1.1 中遇到的最烦人的事情之一 - 在保存更改时必须更改周围 JSF 标记上的 id 属性,以便运行时引擎发现更改 - 消失了,给出了保存 -在编辑器中、在浏览器中重新加载循环回来,以及更好的错误消息。