【发布时间】:2017-02-24 19:27:33
【问题描述】:
我正在尝试学习一些 JEE 开发。假设我正在构建一个网站,其页面有很多常见的 HTML 代码。我想避免为我创建的每个页面重复常见的 HTML 代码。从哲学上讲,似乎有两种方法可以做到这一点。
- 继承 - 让每个页面“继承”自一个通用模板,只提供将“注入”到父级相应漏洞中的 HTML 代码。 Django 实际上支持这一点。
- 组合 - 通过在您的页面中包含其他预定义的 html sn-ps 来组合页面。
这些不是相互排斥的。理想情况下,您可以从定义基本骨架的父模板继承,但您注入父模板的代码可能由几个不同的 HTML sn-ps 组成。
问题在于 JSP 似乎只真正支持后一种方法:
<%@ include file="header-navigation.jsp" %>
<jsp:include page="/header-navigation.jsp"/>
如果我能够在我的 servlet 上设置一些参数以便我可以动态地包含页面,我可以实现“继承”:
<html>
<body>
<header>...commong header code...</header>
<jsp:include page="/snippets/{view}/>
</body>
</html>
这仍然是组合,但从代码的角度来看,servlet 可以设置“view”参数,知道它将被注入到整体骨架中,从而实现某种形式的模板“继承”。这是可能的,甚至是可取的吗?
另一种选择是在 base.jsp 文件中包含控制器逻辑,但这看起来很臭。
<% if(view="aboutme") { %><%@ include file="aboutme.jsp" %><% } %>
<% if(view="aboutme") { %><jsp:include file="aboutme.jsp" %><% } %>
第一个看起来很疯狂,因为这是一个静态包含,并且会生成包含所有页面内容的巨大 JSP .class 文件。第二个似乎仍然存在问题,您仍然需要对“aboutme.jsp”进行硬编码...
请就从这里追求的途径提供一些指导!
【问题讨论】: