son*_*oom 154 java jsp jsp-tags include tagfile
似乎有两种使用JSP进行模板化的方法.包含其中一个语句的文件
<%@ include file="foo.html" %>
<jsp:include page="foo.html" />
Run Code Online (Sandbox Code Playgroud)
或使用JSP标记文件
// Save this as mytag.tag
<%@ tag description="Description" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<jsp:doBody/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在另一个JSP页面中调用它
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:mytag>
<h1>Hello World</h1>
</t:mytag>
Run Code Online (Sandbox Code Playgroud)
那么我应该使用哪种方法?现在一个被认为已被弃用,或者它们是否有效且涵盖不同的用例?
编辑
是否使用此标记文件与使用包含相同?
// 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/>
Run Code Online (Sandbox Code Playgroud)
并在另一个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>
Run Code Online (Sandbox Code Playgroud)
在我看来,这与使用include和传递参数非常相似.标签文件与包含相同吗?
inf*_*k01 285
有几种机制可以重用JSP文件中的内容.
在JSP中包含内容的以下4种机制可以归类为直接重用 :(
对于引用"Head First Servlets和JSP"的前3个机制)
1)include指令:
Run Code Online (Sandbox Code Playgroud)<%@ include file="header.html" %>静态:在转换时将文件属性值的内容添加到当前页面.该指令最初用于静态布局模板,如HTML标头.
2)
<jsp:include>标准动作:Run Code Online (Sandbox Code Playgroud)<jsp:include page="header.jsp" />动态:在请求时将页面属性值的内容添加到当前页面.更适用于来自JSP的动态内容.
3)
<c:import>JSTL标签:Run Code Online (Sandbox Code Playgroud)<c:import url=”http://www.example.com/foo/bar.html” />动态:在请求时将URL属性值的内容添加到当前页面.它的工作原理很多
<jsp:include>,但它更强大和灵活:与其他两个包含不同,<c:import>url可以来自web容器之外!4)前奏曲和密码:
静态:前奏曲和密码只能应用于页面的开头和结尾. 通过在Web应用程序web.xml部署描述符中的元素内分别添加和元素,
可以隐式地为一组JSP页面包含前奏(也称为标题)和codas(也称为页脚) .在此处阅读更多内容: • 在JSP的开头和结尾配置隐式包含 • 定义隐式包含<include-prelude><include-coda><jsp-property-group>
标记文件是内容重用的间接方法,即封装可重用内容的方式.一个标签文件是包含的JSP代码片段是可重复使用的源文件自定义标签.
包含和标记文件的目的是不同的.
标记文件(JSP 2.0引入的概念)是创建自定义标记的选项之一.这是构建自定义标记的更快速,更简单的方法. 自定义标记(也称为标记扩展)是JSP元素,允许将其他Java组件提供的自定义逻辑和输出插入到JSP页面中.通过自定义标记提供的逻辑由称为标记处理程序的Java对象实现.
可以由自定义标签执行的任务的一些示例包括操作隐式对象,处理表单,访问数据库和诸如电子邮件和目录的其他企业服务,以及实现流控制.
也许在您的示例中(在您的编辑中),使用直接包含和标记文件之间没有区别.但自定义标签具有丰富的功能.他们能
通过从调用页面传递的属性进行自定义.
将变量传递回调用页面.
访问JSP页面可用的所有对象.
相互沟通.您可以创建和初始化JavaBeans组件,创建一个公共EL变量,该变量在一个标记中引用该bean,然后在另一个标记中使用该bean.
嵌套在一起并通过私有变量进行通信.
另请阅读"Pro JSP 2":了解JSP自定义标记.
来自coreservlet.com的非常丰富且易于理解的教程,其中包含<jsp:include> VS. <%@ include %>
对比表的精美解释:
在JSP页面中包含文件和小程序
coreservlets.com的另一个很好的教程与标记库和标记文件有关:
创建自定义JSP标记库:基础知识
带有示例的官方Java EE 5教程:
使用标记文件封装可重用内容.
来自官方Java EE 5教程的这个页面应该让您更加理解:
在JSP页面中重用内容.
"Pro JSP 2"一书的摘录也讨论了为什么需要标记文件而不是使用静态包含:将
内容与标记文件重用
使用合适的工具进行具体任务.
使用标记文件作为创建自定义标记的快捷方式.
至于JSP中的包含内容(引自这里):
如果文件很少更改,请使用include指令.这是最快的机制.如果容器未自动检测更改,则可以通过删除主页面类文件强制更改生效.
仅对经常更改的内容使用include操作,以及在请求主页面之前无法确定要包含的页面.
小智 21
<@include> - 指令标记指示JSP编译器在创建生成的servlet代码之前将包含文件的内容合并到JSP中.它等同于将包含页面中的文本剪切并粘贴到JSP中.
<jsp:include> - 在另一方面,JSP操作标记指示容器暂停该页面的执行,去运行包含的页面,从该页面的输出合并成从该页面的输出.
根据您的需要,您可以使用
<@include>或<jsp:include>
小智 9
主要优势体现<jsp:include />在<%@ include >是:
<jsp:include /> 允许传递参数
<jsp:include page="inclusion.jsp">
<jsp:param name="menu" value="objectValue"/>
</jsp:include>
Run Code Online (Sandbox Code Playgroud)
这是不可能的 <%@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编写标记,则不需要混合使用Java和HTML代码.
| 归档时间: |
|
| 查看次数: |
119166 次 |
| 最近记录: |