似乎有两种使用JSP进行模板制作的方法。包含具有以下语句之一的文件
<%@ include file="foo.html" %> <jsp:include page="foo.html" />
或使用JSP标记文件
// Save this as mytag.tag <%@ tag description="Description" pageEncoding="UTF-8"%> <html> <head> </head> <body> <jsp:doBody/> </body> </html>
然后在另一个JSP页面中使用
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %> <t:mytag> <h1>Hello World</h1> </t:mytag>
那么我应该使用哪种方法?现在是否已弃用一个,或者它们既有效又涵盖不同的用例?
编辑
使用此标记文件与使用包含文件不一样吗?
// Save this as product.tag <%@ tag description="Product templage" pageEncoding="UTF-8"%> <%@ tag import="com.myapp.Product" %> <%@ attribute name="product" required="true" type="com.myapp.Product"%> Product name: ${product.name} <br/> Quantity: ${product.quantity} <br/>
并在另一个JSP上调用它
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %> <t:product> <c:forEach items="${cart.products}" var="product"> <t:product product="${product}"/> </c:forEach> </t:product>
在我看来,这与使用include并将参数传递给它完全相同。标记文件和包含的文件一样吗?
有几种重用JSP文件中内容的机制。
以下将在JSP中包含内容的4种机制可以归类为直接重用:( 对于引用“ Head First Servlets and JSP”的前3种机制)
1)he include directive:
<%@ include file="header.html" %>
静态:在转换时将文件属性值中的内容添加到当前页面。该指令最初用于静态布局模板,例如HTML标头。
2)The standard action:
<jsp:include page="header.jsp" />
动态:在请求时,将页面属性值中的内容添加到当前页面中。旨在用于来自JSP的动态内容。
3)The JSTL tag:
<c:import url=”http://www.example.com/foo/bar.html” />
动态:在请求时,将URL属性值中的内容添加到当前页面。它的工作原理与相似 ,但功能更强大,更灵活:与其他两个包含项不同, URL可以来自Web Container外部!
4) Preludes and codas:
静态的:前奏和尾声只能应用于页面的开头和结尾。 你可以隐含包括序曲(也称为头)和音韵尾 一组JSP页面(也称为页脚)加入 <include-prelude>和<include-coda>一个内分别元素<jsp-property-group>在Web应用程序中元素的web.xml部署描述符。在此处了解更多信息: • 在JSP的开头和结尾配置隐式包含 • 定义隐式包含
<include-prelude>
<include-coda>
<jsp-property-group>
标记文件是内容重用的间接方法,是封装可重用内容的方法。一个标签文件是包含的JSP代码片段是可重复使用的源文件自定义标签。
包含文件和标记文件的目的不同。
标记文件(JSP 2.0引入的一个概念)是创建自定义标记的选项之一。这是构建自定义标签的更快,更轻松的方法。 定制标记(也称为标记扩展)是JSP元素,允许将其他Java组件提供的定制逻辑和输出插入JSP页面。通过自定义标签提供的逻辑由称为标签处理程序的Java对象实现。
可以由定制标记执行的任务的一些示例包括对隐式对象进行操作,处理表单,访问数据库和其他企业服务(例如电子邮件和目录)以及实现流控制。