似乎有两种使用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
<jsp:include page="header.jsp" />
动态:在请求时,将页面属性值中的内容添加到当前页面中。旨在用于来自JSP的动态内容。
3)The
<c:import url=”http://www.example.com/foo/bar.html” />
动态:在请求时,将URL属性值中的内容添加到当前页面。它的工作原理与相似
4) Preludes and codas:
静态的:前奏和尾声只能应用于页面的开头和结尾。
你可以隐含包括序曲(也称为头)和音韵尾 一组JSP页面(也称为页脚)加入 <include-prelude>
和<include-coda>
一个内分别元素<jsp-property-group>
在Web应用程序中元素的web.xml部署描述符。在此处了解更多信息:
• 在JSP的开头和结尾配置隐式包含
• 定义隐式包含
标记文件是内容重用的间接方法,是封装可重用内容的方法。一个标签文件是包含的JSP代码片段是可重复使用的源文件自定义标签。
包含文件和标记文件的目的不同。
标记文件(JSP 2.0引入的一个概念)是创建自定义标记的选项之一。这是构建自定义标签的更快,更轻松的方法。 定制标记(也称为标记扩展)是JSP元素,允许将其他Java组件提供的定制逻辑和输出插入JSP页面。通过自定义标签提供的逻辑由称为标签处理程序的Java对象实现。
可以由定制标记执行的任务的一些示例包括对隐式对象进行操作,处理表单,访问数据库和其他企业服务(例如电子邮件和目录)以及实现流控制。
并在另一个JSP上调用它 在我看来,这与使用include并向其传递参数是一样的。那么标记文件和includes是一样的吗?
根据JSP规范: JSP容器可以包含一种机制,用于在包含的文件发生更改时收到通知,因此容器可以重新编译JSP页面。但是,JSP 1.2规范没有一种方法可以指示包含文件已更改的JSP容器。 我在一个在线教程中发现了这一点: 如果包含的文件发生了更改,但包含它的JSP没有发生更改,那么这些更改只会在我们使用包含动作标记时反映出来。如果您使用include指令,这些更改将不会反映出来,因为JSP没有更改
它们之间有什么区别吗?
我刚刚开始使用Angular 2。 我想知道Angular 2中的组件和指令有什么区别?
我想在jsp文档文件中使用类似的内容: 但是,在我看到的所有30个示例中,每个人都使用简单的jsp语法,而不是jsp文档语法。类似于这样: 根本不起作用。页面上看不到驻留在 /WEB-INF/tags中的所有标记文件。只有当我定义一个tld文件并在其中列出所有标记时,才能在页面上访问它们。是否可以避免tld声明并仍然在jsp文档页面中使用标记文件?
我正在尝试创建一个安装在sling中的捆绑包,并使用自定义TagLib。我想使用标记文件,而不是使用扩展TagSupport的java类。这样,我可以使用Sling模型来表示JCR,使用JSP标记文件来表示标记。 这是我的标记文件,它是一个非常基本的锚,没有什么特别的,我只是想测试一下: 我创建了一个TLD文件,我在WEB-INF/tags和META-INF/tags文件夹中都尝试了该文件(我去掉