似乎有两种使用 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>
在我看来,这与使用包含并将参数传递给它非常相同。那么 Tag Files 和 include 一样吗?
原文由 sonicboom 发布,翻译遵循 CC BY-SA 4.0 许可协议
JSP 语法元素概述
首先,为了让事情更清楚,这里是 JSP 语法元素 的简短概述:
JSP 中如何包含内容
有几种机制可以重用 JSP 文件中的内容。
以下 4 种在 JSP 中包含内容的机制 可以归类为 直接重用:
(前 3 种机制引用自 “Head First Servlets and JSP” )
Tag File 是一种 间接的内容复用方法,是对可复用内容进行 封装 的方式。 标记文件 是一个源文件,其中包含可作为 自定义标记 重用的 JSP 代码片段。
包含文件和标记文件的用途不同。
标记文件(JSP 2.0 引入的概念)是 创建自定义标记 的选项之一。这是构建 自定义标签 的更快、更简单的方法。 自定义标签,也称为标签扩展,是 JSP 元素,允许将其他 Java 组件提供的自定义逻辑和输出插入到 JSP 页面中。通过自定义标记提供的逻辑由称为 标记处理程序 的 Java 对象实现。
自定义标记可以执行的一些任务示例包括对隐式对象进行操作、处理表单、访问数据库和其他企业服务(例如电子邮件和目录)以及实施流量控制。
关于您的编辑
也许在您的示例中(在您的 “编辑” 段落中),使用直接包含和标记文件之间没有区别。但是 自定义标签有一组丰富的特性。他们能
通过调用页面传递的属性进行定制。
将变量传递回调用页面。
访问 JSP 页面可用的所有对象。
互相交流。您可以创建并初始化一个 JavaBeans 组件,创建一个在一个标记中引用该 bean 的公共 EL 变量,然后在另一个标记中使用该 bean。
相互嵌套并通过私有变量进行通信。
另请阅读“Pro JSP 2”: Understanding JSP Custom Tags 。
有用的阅读。
JSP 中的 include 指令和 include 动作的区别
使模板制作更容易的 JSP 技巧
来自 coreservlet.com 的非常翔实且易于理解的教程,带有漂亮的解释,包括
<jsp:include> VS. <%@ include %>
比较表:在 JSP 页面中包含文件和小程序
创建自定义 JSP 标记库:基础知识
使用标记文件封装可重用内容。
在 JSP 页面中重用内容。
重用标签文件的内容
静态包含与动态包含
结论
使用 标记文件 作为创建 自定义标记 的快速简便方法,可以帮助您 _封装可重用的内容_。
至于 JSP 中包含的内容(引用自 此处):