一尘不染

使用JSP include指令包含文件,使用JSP include操作和使用JSP标记文件之间有什么区别?

java

似乎有两种使用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并将参数传递给它完全相同。标记文件和包含的文件一样吗?


阅读 864

收藏
2020-03-07

共1个答案

一尘不染

有几种重用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的开头和结尾配置隐式包含
• 定义隐式包含

标记文件是内容重用的间接方法,是封装可重用内容的方法。一个标签文件是包含的JSP代码片段是可重复使用的源文件自定义标签。

包含文件和标记文件的目的不同。

标记文件(JSP 2.0引入的一个概念)是创建自定义标记的选项之一。这是构建自定义标签的更快,更轻松的方法。 定制标记(也称为标记扩展)是JSP元素,允许将其他Java组件提供的定制逻辑和输出插入JSP页面。通过自定义标签提供的逻辑由称为标签处理程序的Java对象实现。

可以由定制标记执行的任务的一些示例包括对隐式对象进行操作,处理表单,访问数据库和其他企业服务(例如电子邮件和目录)以及实现流控制。

2020-03-07