看来,有两种方法可以用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>
在我看来,是很一样使用包括和传递参数给它。 那么,标记文件一样包括?
有用于在JSP文件中重复使用内容的机制。
在JSP以下4个机制包括的内容可以分为直接再利用 :
(对于第一3个机制从引用“头首先Servlet和JSP” )
1)包括指令:
<%@ include file="header.html" %>
静态 :将来自在翻译时文件属性为当前页面的价值含量。 该指令原本用于静态布局模板,如HTML头。
2) <jsp:include>
标准动作:
<jsp:include page="header.jsp" />
动态 :增加从页面属性添加到当前页面的值在请求时的内容。 旨在为更多动态内容采用JSP来。
3) <c:import>
JSTL标签:
<c:import url=”http://www.example.com/foo/bar.html” />
动态 :增加从URL属性到当前页面的价值内容, 在请求时 。 它的工作原理很像<jsp:include>
,但它的功能更强大和灵活的:不像其他两种包括,在<c:import>
URL可以从Web容器外 !
4)前奏曲与尾波:
静态 :前奏和尾波可以仅适用于起点和页面端 。
可以通过添加隐含地包括一组JSP页面前奏曲 (也称为头)和尾波 (也称为页脚) <include-prelude>
和<include-coda>
分别内的元件<jsp-property-group>
中的元素Web应用程序的web.xml部署描述符。 在这里阅读更多:
• 配置隐式包括在JSP页面的开头和结尾
• 定义隐含包括
标签文件是重复使用内容的间接方法 , 封装可重用内容的方式。 一个标签文件是包含的JSP代码片段是可重复使用的自定义标签源文件。
目的包括和标记文件是不同的。
标记文件 (用JSP 2.0中引入的一个概念)是用于创建自定义标签的选项之一。 这是建立自定义标签更快,更简单的方法。 自定义标签 ,也称为标记的扩展,是JSP元素,允许定制逻辑和由其他Java组件提供的输出将被插入到JSP页面。 通过定制的标签中提供的逻辑由被称为标记处理程序的Java对象来实现。
可以通过自定义标记来执行的任务的一些例子包括对隐含对象,处理表单,访问数据库和其他企业服务,如电子邮件和目录操作,并实施流量控制。
关于你的编辑
也许在你的例子(在你的编辑 ),则采用直接包含和标记文件没有区别。 但是, 自定义标签具有丰富的功能 。 他们能
:同样来自“临JSP 2”阅读理解JSP自定义标记 。
有用的书。
区别include指令,包括在JSP动作
JSP技巧,使模板化更容易
非常丰富和易于理解的教程从coreservlet.com与美丽的解释,其中包括<jsp:include> VS. <%@ include %>
<jsp:include> VS. <%@ include %>
比较表:
包括文件和小程序中的JSP页面
从coreservlets.com另外一个不错的教程,标记库和标记文件相关:
创建自定义JSP标记库:基础知识
官方的Java EE 5教程使用的例子:
封装可重用内容使用标记文件编写 。
这从官方的Java EE 5教程页面应该给你更多的了解:
重用在JSP页面中的内容 。
本文节选自书“临JSP 2”也铁饼为什么你需要一个标记文件,而不是使用静态包括 :
标记文件的内容重用
结论
使用正确的工具的具体任务。
使用标记文件的创建自定义标签的快速简便的方法。
至于在JSP(从报价包括内容这里 ):
可能有重复的问题
<@include>
-该指令标签指示JSP编译器创建生成的servlet代码之前合并所包含的文件到JSP的内容。 它相当于切割,并从包括页面直接进入你的JSP粘贴文本。
- 只有一个小服务程序在运行时执行。
- 在父页面中声明Scriptlet中变量可以被包含的页面(记住,它们是同一个页面)进行访问。
- 所包含的页面并不需要能够被编译为一个独立的JSP。 它可以是一个代码段或纯文本。 所包含的页面不会被编译为一个独立的。 所包含的页面也可以有任何扩展,虽然名.jspf已经成为常规使用的扩展。
- 在旧的容器的一个缺点是,直到父页面更新更改包括页面可能无法生效。 Tomcat的最近的版本将检查包括更新的网页,并迫使父母重新编译,如果他们更新。
- 另一个缺点是,由于该代码是直接联到生成的servlet的服务的方法,该方法可以变得非常大。 如果超过64 KB,你的JSP编译很可能会失败。
<jsp:include>
-在另一方面,JSP操作标记指示容器暂停该页面的执行,去运行包含的页面,从该页面的输出合并成从该页面的输出。
- 每个页面包含如在运行时单独的servlet执行。
- 页面可以有条件地包括在运行时。 这往往是模板化是构建页面出来的包括框架有用。 父页面可以确定根据某些运行时条件包括页面,如果有的话。
- 小脚本变量的值需要明确地传递到包括网页。
- 所包含的网页,必须能够独立运行。
- 你不太可能碰到编译错误是由于生成的servlet类被超过的最大尺寸的方法。
根据您的需求,可以选择使用<@include>
或<jsp:include>
的主要优点<jsp:include />
在<%@ include >
是:
<jsp:include />
允许通过参数
<jsp:include page="inclusion.jsp">
<jsp:param name="menu" value="objectValue"/>
</jsp:include>
这是不可能在<%@include file="somefile.jsp" %>
所有这三个模板选项- <%@include>
, <jsp:include>
和<%@tag>
是有效的,并且所有三个覆盖不同的使用情况。
与<@include>
中,JSP解析器线所包含的文件的内容,存入JSP编译(类似于一个C之前#include
)。 你会使用简单的,静态内容此选项:例如,如果你想包括页眉,页脚,或导航元素融入在你的web应用程序的每一页。 所包含的内容变成编译JSP的一部分,在运行时也没有额外的费用。
<jsp:include>
(和JSTL的<c:import>
,这是类似并且甚至更强大的)最适合于动态内容。 当你需要包括来自另一个URL,本地或远程内容使用这些; 当你包括资源本身是动态的; 或者当包括内容使用变量或bean定义,与包括分页冲突。 <c:import>
还允许您存储在一个变量,它可以进一步处理或再利用所包括的文本。 这两种招致派遣额外的运行时代价:这是最小的,但你需要知道的是,动态包括不是“自由”。
当你想创建可重用的用户界面组件使用的标记文件。 如果你有小工具,比如一个列表,你要遍历窗口小部件和每个显示属性(在表中,或者在一种形式),你需要创建一个标签。 标签可以使用参数,使用<%@tag attribute>
并且这些参数可以是强制的或可选-有点像方法参数。
标记文件编写标签库的简单的,基于JSP的机制,你不得不使用Java代码来写这(预JSP 2.0)。 这是一个很大清洁编写JSP标记文件时,有大量的渲染在标签做的:你不需要混合Java和HTML代码,你必须做,如果你用Java写的标签。
文章来源: What's the difference between including files with JSP include directive, JSP include action and using JSP Tag Files?