`
gaozhonghui
  • 浏览: 241423 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古自治区
社区版块
存档分类
最新评论

jsp的tag的详细使用

阅读更多

文章来自:http://mht.iteye.com/blog/165185

 

关键字: tag

最近一直在研究ext,偶然的机会发现了个exttld,它自身原理既是jsp标记,特收集一些资料,希望对兄弟们有所帮助。

 

 标记文件是 JavaServer Pages (JSP) 技术最重要的新增功能之一,它允许 Web 开发人员利用 JSP 语法创建自定义的标记库。JSP 容器自动将 JSP 标记文件转换为 Java 代码,其过程与从 JSP 页透明地生成 Java Servlet 的过程相同。可以说标记文件隐藏了创建自定义 JSP 标记库的复杂性。这种库能够在 Web 应用程序中重用,它们甚至在用于特定应用程序时也会提供显著的效益,因为自定义标记提高了 Web 页的可维护性。在阅读本文后,您将了解如何创建和使用标记文件以及如何将现有的页片段变换为标记文件。

  JSP 2.0 定义了三个新的指示语句(<%@tag%>、<%@attribute%> 和 <%@variable%>)和两个新的标准操作(<jsp:invoke> 和 <jsp:doBody>),它们只能在标记文件中使用。我们将在整篇文章中使用它们,并且您将了解如何利用更加高级的标记文件特性,如“动态属性”、“片段属性”和“根据属性命名的变量”。当标记文件与 JSP 标准标记库 (JSTL) 同时使用时,标记文件可以是一种功能强大的工具,而 JSTL 引入了由 JSP 2.0 和许多 JSP 操作所采用的表达式语言,包括一系列 SQL 标记。我们将使用 JSTL 和高级的 JSP 特性来创建标记文件,用于更新和查询数据库。

  标记文件概述

  JSP 1.x 允许 Web 开发人员创建 Java 组件(称为标记处理程序),这些组件是通过自定义标记从 JSP 页进行调用的。标记处理程序类似于以前的 Java Servlet,因为您使用很多 println() 调用来生成 HTML 内容,然后必须编译您的 Java 代码。JSP 2.0 的标记文件类似于 JSP 页,因为您使用 JSP 语法,然后 JSP 容器获取您的 JSP 标记文件,分析这些标记文件,生成 Java 标记处理程序,并自动编译它们。标记文件是从 JSP 页进行调用的,JSP 页使用与 <prefix:tagFileName> 模式相匹配的自定义标记。

  为了使标记文件能够被 JSP 容器所识别,标记文件必须使用 .tag 文件扩展名进行命名,并且必须被放置在您的 Web 应用程序的 /WEB-INF/tags 目录中或者 /WEB-INF/tags 的子目录中。如果您采用这种部署方法,则不必创建任何标记库描述器 (TLD),因为 JSP 库是利用 Java 标记处理程序所实施的。您也可以将标记文件放置在 .jar 文件的 /META-INF/tags 目录中,其部署更容易,但在这种情况下,您必须创建 TLD,并且必须在每次更改后重新对标记文件进行打包。

  标记文件和 JSP 页使用几乎相同的语法。您会注意到的第一个区别是新的 <%@tag%> 指示语句,它等同于 <%@page%>。这两个指示语句具有相似的属性,但前者用于标记文件,而后者只能用于 JSP 页中。标记文件并不在一个单独的 .tld 文件中声明其属性和变量,而是使用 <%@attribute%> 和 <%@variable%> 指示语句。当从 JSP 页调用标记文件时,自定义标记可以具有主体(在 <prefix:tagFileName> 与 </prefix:tagFileName> 之间),该主体可以由标记文件利用 <jsp:doBody> 操作来执行。您在下一节中将会看到这是如何工作的。

  使用标记文件代替页片段

  为了拥有可维护的 Web 页,许多经过良好设计的 JSP 1.x 应用程序使用了页片段,这些页片段是利用 <jsp:include> 或 <%@include%> 而包含在较大页面中的,而这不是在 Web 应用程序中重用 JSP 片段的理想方法。与页包含解决方案不同,标记文件专用于创建可重用的页片段库。本节比较了过时的 JSP 1.x 方法的语法与 JSP 2.0 标记文件的更好语法。

  将被包含页变换为标记文件。让我们假设您具有一个名为 container.jsp 的页面,它利用 <jsp:include page="part.jsp"/> 包含了另一个名为 part.jsp 的页面。执行以下步骤,将 part.jsp 变换为标记文件。

  第 1 步:移动被包含页。

  在您的应用程序的 WEB-INF 目录中,创建一个名为 tags 的子目录,并将 part.jsp 页移动到 WEB-INF/tags 中。

  第 2 步:重命名被包含页。

  由于标准的标记文件扩展名是 .tag,您必须将 part.jsp 重命名为 part.tag。

  第 3 步:编辑标记文件。

  打开 part.tag 文件进行编辑,将 <%@page%> 指示语句替换为类似的 <%@tag%> 指示语句。如果遇到编译错误,则可能需要进行其他一些小的修改。使用 jspContext 替代 pageContext。

  第 4 步:声明标记库。

  在 container.jsp 的开头插入 <%@taglib prefix="tags" tagdir="/WEB-INF/tags"%>。

  第 5 步:调用标记文件。

  在 container.jsp 中将 <jsp:include page="part.jsp"/> 替换为 <tags:part/>。

  container.jsp(变换前)

  <p> Container Page </p>

  <jsp:include page="part.jsp"/>

  container.jsp(变换后)

  <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>

  <p> Container Page </p>

  <tags:part/>

  part.jsp(变换前)

  <%@ page language="java" %>

  <p> Included Page </p>

  <%= pageContext.getClass().getName() %>

  part.tag(变换后)

  <%@ tag language="java" %>

  <p> Invoked tag </p>

  <%= jspContext.getClass().getName() %>

  基于 <jsp:include> 和 <%@include%> 的示例。本示例的主页 (main.jsp) 使用 <%@include%> 指示语句包含了两个页片段(header.jspf 和 footer.jspf)。主页还通过使用 <jsp:include> 来包含另一个页面 (content.jsp)。main.jsp 页利用 <jsp:param> 标准操作,向被包含页提供了三个参数(a、b 和 c)。被包含的 content.jsp 页利用 ${param.a}、${param.b} 和 ${param.c} 输出三个参数的值。

  main.jsp

  <%@ include file="header.jspf" %>

  <jsp:include page="content.jsp">

  <jsp:param name="a" value="1"/>

  <jsp:param name="b" value="2"/>

  <jsp:param name="c" value="3"/>

  </jsp:include>

  <%@ include file="footer.jspf" %>

  header.jspf

  <p> Header </p>

  footer.jspf

  <p> Footer </p>

  content.jsp

  <p> Included Content </p>

  <p> Parameters - ${param.a}, ${param.b}, ${param.c} </p>

  基于标记文件的示例。本示例的 JSP 页 (main.jsp) 使用 <%@taglib%> 指示语句来声明包含标记文件 (wrapper.tag) 的库,指出其前缀 (tags) 以及创建标记文件的目录 (/WEB-INF/tags)。main.jsp 页使用 <tags:wrapper> 自定义标记来调用 wrapper.tag 文件,该标记具有三个属性(a、b 和 c)和一些主体内容 (<p> Wrapped Content </p>)。注意,您在 JSP 页的 <tags:wrapper> 与 </tags:wrapper> 之间可以不使用任何脚本编制元素。脚本编制元素包括 JSP 1.x 声明 (<%!...%>)、JSP 1.x 表达式 (<%=...%>) 和 scriptlet (<%...%>),而 JSP 2.0 支持所有这些元素。注意,标记文件可以象任何常规 JSP 页一样使用脚本编制元素。实际上,如果您不喜欢基于 Java 标记处理程序来创建 JSP 库,那么将 Java 代码从现有的 JSP 页移到标记文件中会是个不错的办法。这会使您的 Java scriptlet 可以被重用,并使您的 Web 页更易读。JSP 容器为您完成繁重的工作,它自动生成标记处理程序类。

  wrapper.tag 文件是前面示例中三个被包含页(header.jspf、footer.jspf 和 content.jsp)的替代品。标记文件使用 <%@attribute%> 指示语句声明三个属性,并输出一个标题、一个页脚以及属性的值(${a}、${b} 和 ${c})。wrapper.tag 文件利用新的 <jsp:doBody> 标准操作,执行 main.jsp 的 <tags:wrapper> 的主体。标记文件决定是否执行以及何时执行 <tags:wrapper> 的主体。如果 wrapper.tag 不使用 <jsp:doBody>,则忽略 <tags:wrapper> 的主体。标记文件还可以多次使用 <jsp:doBody>,以便多次执行该主体。

  main.jsp

  <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>

  <tags:wrapper a="1" b="2" c="3">

  <p> Wrapped Content </p>

  </tags:wrapper>

  wrapper.tag

  <%@ tag body-content="scriptless" %>

  <%@ attribute name="a" required="true" %>

  <%@ attribute name="b" required="true" %>

  <%@ attribute name="c" required="true" %>

  <p> Header </p>

  <jsp:doBody/>

  <p> Attributes - ${a}, ${b}, ${c} </p>

  <p> Footer </p>

  
  
  标记文件对比于 <jsp:include> 和 <%@include%>。调用标记文件的自定义标记具有比 <jsp:include> 与 <jsp:param> 的组合更紧密的语法。自定义标记还能以自然的方式进行嵌套和缩进,使得代码易于阅读。唯一可能感觉不便的方面是一项限制,不允许您在调用标记文件的自定义标记主体中使用脚本编制元素。考虑到无脚本的 Web 页可能更易于维护,实际上这也许是

分享到:
评论

相关推荐

    jsp tag标签的使用

    本文将详细介绍JSP的tag标签及其使用方法。** 首先,我们要理解JSP中的tag标签分为两种类型:标准标签库(JSTL, JavaServer Pages Standard Tag Library)和自定义标签库(Custom Tags)。JSTL是预定义的一组标签,...

    JSP2.0 Tag 使用

    在JSP2.0技术规范中,引入了一种新的标签机制,被称为Tag Files(标签文件),其主要目标是为了解决传统JSP页面中脚本元素的使用问题,提供一个更为简洁和高效的方式来进行页面动态内容的添加。开发者可以利用标签...

    jsp tag接口图

    **JSP Tag接口图**是JavaServer Pages(JSP)技术中的一个重要概念,它涉及到JSP自定义标签的开发和实现。在JSP中,标签库可以极大地提高代码的可读性和可维护性,而Tag接口是创建这些自定义标签的基础。本篇将深入...

    birt jsp tag

    BIRT中JSP Tag的使用 BIRT从2.2开始(最好采用2.2M6及以后版本),提供JSP tag的支持。 现在主要提供了以下5个JSP Tag: 1. viewer --------- 对应 frameset/run 模式,基于Ajax 2. report ---------- 对应 preview...

    javascript合并压缩的jsp tag实现

    在本案例中,我们使用 JSP Tag 来实现 JavaScript 文件的合并与压缩。 实现这个功能的关键步骤包括: 1. **文件读取**:首先,我们需要读取所有待合并的 JavaScript 文件内容。这通常通过文件系统 API 完成,例如 ...

    一个很简单的jsp新闻网站(tag文件和jsp链接)

    一个很简单的jsp新闻网站(tag文件和jsp链接)一个很简单的jsp新闻网站(tag文件和jsp链接)一个很简单的jsp新闻网站(tag文件和jsp链接)一个很简单的jsp新闻网站(tag文件和jsp链接)一个很简单的jsp新闻网站(tag...

    ZK框架JSP TAG使用手册

    ### ZK框架JSP TAG使用手册 #### 一、前言与准备工作 ##### 新手入门:JSP与ZK 如果你是初次接触JSP(JavaServer Pages)或ZK框架,那么这份用户指南将为你提供一个很好的起点。JSP是一种用于生成动态网页的技术...

    Tag的使用<JSP 2.0新特性>

    本实例将深入探讨`Tag`的使用,以及如何通过JSP 2.0新特性来简化自定义标签的开发过程。 自定义标签的核心在于Tag Handler,这是处理特定标签行为的Java类。在JSP 2.0之前,创建自定义标签需要编写复杂的TLD(Tag ...

    上传并显示图片(使用jsp+tag编程,实现上传并显示图片功能)

    以上就是使用JSP和Tag实现上传并显示图片功能的详细步骤。这个过程涉及到前端交互、后端处理、自定义标签的创建以及服务器配置,对于理解和实践Web开发中的文件操作和自定义标签机制非常有帮助。

    jsp自制详细笔记

    这部分可能涵盖了JSP的详细内容,如JSP页面生命周期、JSP指令(page、include、taglib)、脚本元素(scriptlet、expression、declaration)、动作标签(jsp:include、jsp:forward、jsp:params等)以及EL(Expression...

    dbform jsp tag框架

    通过使用"dbform jsp tag框架",开发者可以更专注于业务逻辑,而不必过于关注界面的实现细节。它简化了开发流程,降低了出错的可能性,是Java Web开发中的一个实用工具。对于初学者,了解并掌握这样的框架能快速提升...

    超级封装的.tag标签分页、超级简化jsp内的分页代码、eclipse源码

    开发者可以将复杂的Java代码或业务逻辑封装在.tag文件中,然后在JSP页面上通过标签调用来使用,这样可以提高代码的可读性和复用性,降低JSP页面的复杂度。在这个案例中,`.tag`文件被用来封装分页的逻辑,使得前端...

    jstl.jar (JSP Standard Tag Library)

    JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库

    JSP 标准标记库(JSP Standard Tag Library,JSTL)

    JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。

    Manning - JSP Tag Libraries.pdf

    《Manning - JSP Tag Libraries》这本书深入探讨了JavaServer Pages (JSP) 标签库这一核心主题,对于理解并有效利用JSP技术进行Web开发具有极高的价值。标签库是JSP中一种强大的工具,它允许开发者通过自定义的标签...

    Manning - JSP Tag Libraries.rar

    综上所述,"**Manning - JSP Tag Libraries**"这本书籍或PDF资料应详细讲解了JSP标签库的概念、使用技巧以及在实际开发中的应用示例,对于理解和掌握JSP开发中的这一关键部分大有裨益。通过深入学习和实践,开发者...

    JSP Tag Libraries

    《JSP Tag Libraries》这本书由Gal Shachor、Adam Chace和Magnus Rydin共同编写,是一本深入探讨JavaServer Pages(JSP)标签库开发的专业书籍。JSP技术是Sun Microsystems公司推出的一种用于创建动态网页的技术,它...

    JSP_tag.rar_Eclipse_eclipse jsp t_jsp custom tag_自定义标签

    本实例将介绍如何在Eclipse集成开发环境中使用Lomboz插件,配合Tomcat 5.0服务器,以及Windows XP Professional操作系统,来创建和使用JSP自定义标签。 首先,我们需要理解JSP自定义标签的概念。JSP自定义标签是...

    jsp页面自定义标签Tag

    **JSP页面自定义标签(Tag)详解** 在Java服务器页面(JSP)技术中,自定义标签(Custom Tag)是提升代码复用性和可维护性的重要手段。它允许开发者创建自己的HTML标签来封装复杂的Java逻辑,使得页面更加清晰、易...

Global site tag (gtag.js) - Google Analytics