`
liuwentao
  • 浏览: 77004 次
  • 来自: 江西
社区版块
存档分类
最新评论

自定义标签简介

    博客分类:
  • web
阅读更多

自定义标签:

JavaBean和自定义标签的区别:它们都是一个可重用的组件,自定义标签可以与jsp页面通信,javabean不行,它只是一种数据模型,标签可以显示数据,javabean是被动的,等jsp来调用,自定义标签可以操纵jsp,是jsp的一部分. 标签体可以包含文本,jsp脚本,jsp表达式,EL表达式,后三种是把执行结果当作文本来处理.
 
通常我们写的标签处理文件,Servlet,JavaBean等只要是java类都要存在classes目录下,或者把它们打包成一个jar包存在lib目录下,properties文件放在classes目录下,即类装载器目录下.也可以打包成jar文件放到lib目录下.tld文件不能放在classes或者lib目录下,只能放在WEB-INF目录或其子目录下.
 
标签处理文件的功能:
★是否让web容器执行标签体,
★是否重复执行标签体,
★是否输出标签体之前修改标签体的执行结果.
★是否执行结束标签后的jsp页面.
 
自定义标签几个重要的接口:
1).Tag接口常用的方法和常量:
EVAL_BODY_INCLUDED,SKIP_BODY,EVAL_PAGE,SKIP_PAGE,setPageContext(),
setParent(),getParent(),doStartTag(),doEndTag(),release(),这些方法的调用顺序如下:
setPageContext()—>setParent()—>setters()—>doStartTag()—>doEndTag()—>release().
2).IterationTag接口,继承自Tag接口,常用的方法和常量:
EVAL_BODY_AGAIN,doAfterBody()
3).BodyTag接口,继承自IterationTag接口,常用的方法和常量:
EVAL_BODY_BUFFERED,setBodyContent(),doInitBody()(初始化Body对象).
 
在jsp的API中BodyTagSupport类已经实现上面的接口,所以我们在编写自定义标签时只需继承这个类,根据需求重写它的一些方法就可以了.
doStartTag():
是否执行自定义标签的标签体,是否创建一个缓冲区对象捕获标签体的执行结果,从而让标签开发者在标签处理种对标签体的执行结果进行修改,其返回值可以是一下三个:
EVAL_BODY_INCLUDE(执行标签体),
SKIP_BODY(跳过标签体),
EVAL_BODY_BUFFERED(把标签体放到缓冲区中,以便进一步处理).
doAfterBody():
其返回值可以为:
EVAL_BODY_AGAIN(表示再执行标签体一次),
SKIP_BODY(表示结束标签体执行继续执行doEndTag)
doEndTag():
控制是否执行结束标签后面的内容, 其返回值可以为:
EVAL_PAGE(表示继续执行结束标签后面的jsp代码);
SKIP_PAGE(表示忽略结束标签后面的jsp代码).
setPageContext():把PageContext传给标签处理器.
setParent():如果自定义标签有父标签,则把父标签传给标签处理器,没有则把null传给标签处理器.
 
TLD文件简介:
如果 JSP 容器在转换时遇到了自定义标签,那么它就检查标签库描述符(tag library descriptorTLD文件以查询相应的标签处理程序。TLD 文件对于自定义标签处理程序,就像 Web 部署描述符对于 servlet 一样。TLD 文件通常保存在 Web 应用程序的WEB-INF目录,它们一般以.tld扩展名结束。下面就是一个简单的tld文件:
<!---->
 <!---->
 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
 <taglib></taglib>
    <tlib-version></tlib-version>1.0
    <jsp-version></jsp-version>2.0
<short-name></short-name>name
<tag></tag>
       <name></name>MyTagName
       <tag-class></tag-class>标签处理文件的完整的类名
       <body-content> </body-content> JSP
  
让我们更详细地分析一下这些标签:
  • TLD 文件的根元素是.它描述了一个标签库 —— 即一组标签/标签处理程序对。
  • <tlib-version></tlib-version>元素对应于标签库版本。
  • <jsp-version></jsp-version>对应于标签库所依赖的 JSP 技术的版本。
  • <short-name></short-name>元素定义了 IDE 和其他开发工具可以使用的标签库的简单名。
  • <taglib></taglib>素包含许多<tag></tag>元素,标签库中每一个标签有一个<tag></tag>元素。
<body-content> </body-content> 这里可以有四个值
empty:表示不能有标签体
JSP:标签体可以是任意一种JSP页面元素
scriptless:不能是JSP页面元素
tagdependent:由标签处理器去处理.jsp引擎不处理标签体,
 
给自定义标签定义属性:
先在java文件中定义属性和set方法.
然后在tld文件中加入:
<attribute></attribute>
<description></description>description:对属性进行描述
<name></name>attributename:为属性定义一个名称,不能以jsp,_jsp,java和sun开头.
<required></required>true:true表示此属性是必需的,false表示可有可无.
<rtexprvalue></rtexprvalue>true: true表示可以使用jsp表达式赋值.
<type></type>ObjectType:指定此属性的java类型.
 
使用动态属性:在tld里面没写有哪些属性.利用集合来实现.
使用<dynamic-attributes></dynamic-attributes>属性
让标签处理器实现javax.servlet.jsp.tagext.DynamicAttirbutes接口
public void setDynamicAttribute(String uri,String localName,Object value){}
 
值得注意的是: pageContext.getOut()返回的Out对象不是不变的.什么都不干的时候返回的是jsp中的out对象.如果返回doStartTag()方法返回EVAL_BODY_BUFFERED,将调用pushBody()方法后把原来的out对象压到栈顶,同时产生一个新的out对象.
popBody()方法可以将新的对象弹出,调用pageContext.getOut()方法就返回原来的out对象.
BodyContent是JspWriter的子类,bodyContent是一个out对象.bodyContent.getEnclosingWriter()返回的是类型JspWriter的out对象,即jsp页面的out对象.
 
 
简单标签库开发:
SimpleTag接口可以完成Tag接口的所有功能.它定义了如下几个方法:
setJspContext(JspContext pc):这个JspContext可以看作是PageContext.
setParent(JspTag parent):有父标签才被调用.
setJspBody(JspFragment jspBody): 如果标签有内容先调用setJspBody()方法.JspFragment就是一个标签体对象,但是不能包含脚本片段和脚本表达式.
doTag():可以处理上述接口中所说的三个方法的所有功能. 如果不想输出标签体,则在doTag()里面什么都不干,如果想循环则for或者while等,如果想改写标签体的内容也在此方法里面改写.要处理标签体内容就调用JspFragment的invoke()方法.如果不想让结束标签后面的jsp代码继续执行就抛出异常.如果JspFragment的invoke()方法的参数为null,就是把JspBody输出到jsp页面
 
在简单标签中定义属性:
<it315:mytag fragment="aaaaaaaa"></it315:mytag>
等同于
<it315:mytag></it315:mytag>
<jsp:attribute name="fragment">aaaaaaaa</jsp:attribute>
使用下面这种方法时,要注意:如果标签有标签体,不能随便写了,应该这样:
<jsp:body></jsp:body>
这里写你的标签体
 
标签库的描述和部署:
jsp1.2:tld文件用的是dtd文件
jsp2.0:用的是xsd文件.
1.   可以<!---->
2.   在web.xml文件中
<web-app></web-app>
       <jsp-config></jsp-config>
              <taglib></taglib>
<taglib-uri></taglib-uri>
给标签库文件指定一个URI,任何有意义的名字都可以,
但是通常以”http://”打头
                     <taglib-location></taglib-location>标签库文件的位置
             
      
3.也可以把标签文件打成jar包放在web应用程序的lib目录下.
分享到:
评论

相关推荐

    JSP自定义标签学习笔记

    二 、自定义标签简介 3 2.1 自定义标签概念 3 2.2 标签相关概念 3 2.3 如何创建自定义标签 3 三、自结束标签(不带标签体,TagSupport) 3 3.1 自结束标签简介 3 3.2 自结束标签开发示例 3 四、标签中的属性 3 4.1 为...

    自定义标签原理和应用

    介绍自定义标签的运行原理以及标签可以干哪些事情,简介传统标签与自定义标签的区别

    Java自定义标签开发.zip

    资源内容:java自定义标签开发;JSP页面中自定义标签详解教程;JSP自定义标签简介;taglib_原理和实现;更多场景的示例Demo;

    扩展HTMLParser对自定义标签的处理能力

    资源名称:扩展HTMLParser对自定义标签的处理能力内容简介: HTMLParser是一个用来解析HTML文档的开放源码项目,它具有小巧、快速、使用简单的特点以及拥有强大的功能。 现在该项目的最新版本是Integration Build ...

    完整版Java JSP web开发教程 10_自定义标签(共20页).ppt

    完整版Java JSP web开发教程 10_自定义标签(共20页).ppt 完整版Java JSP web开发教程 11_JSP 标准标签库(共21页).ppt 完整版Java JSP web开发教程 12_过滤器(共20页).ppt 完整版Java JSP web开发教程 13_MVC ...

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...

    用简单的jquery+CSS创建自定义的a标签title提示tooltip

    用简单的jquery+CSS创建自定义的a标签title提示,用来代替浏览器默认行为。如图:   Javascript代码 复制代码代码如下: &lt;/pre&gt;&lt;pre name=”code” class=”javascript”&gt;$(function() { $(“a[title]”).each...

    TTTagView:一个优雅的支持单行,多行分页,支持单选多选等功能的自定义标签视图

    TTTagView简介一个优雅的支持单行,多行分页,支持单选多选等功能的自定义标签视图1、支持自动布局,不需要计算高度,也不需要指定frame,自适应高度2、支持单行,多行显示3、支持分页显示4、支持单选,多选,禁用...

    JSP宝典

    本书比较全面地介绍了有关JSP的相关知识,并通过大量实例循序渐进地阐明如何构架和开发JSP动态网站、自定义标签开发和标准标签库JSTL使用以及Ajax等Web2.0新特性。本书首先介绍了JSP的概念和特征,使读者对JSP先有一...

    vue组件系列之TagsInput详解

    简介 TagsInput 是一种可编辑的输入框,通过回车或者分号来分割每个标签,用回退键删除上一个标签。用 vue 来实现还是比较简单的。 先看效果图,下面会一步一步实现他。 注:以下代码需要vue-cli环境才能执行 (一...

    Infinity新标签页(Pro)遇见美好的Chrome新标签页

    相比Chrome自带的新标签页,您可以通过Infinity自定义添加自己喜爱的网站,我们重绘了上千当然,您也可以自定义这些网站的图标。除此之外,您还可以更新新标签页的背景图片,既可以使用您自己的图片,也可以使用自动...

    JSP 利用标签实现分页技术

    利用JSP自定义标签分页,把代码封装在底层,JSP页面没有一句java代码,使运行界面看起来十分简介美观和完美、、

    mark.js:mark.js用于标记的文字,自定义插入标签

    自定义插入标签(PC端): 示例 const m = new Mark(document.querySelector('xxx'), { tagName: 'mark' }) // 自动标记 m.automark(dataList) // 文字涂改、文字缺漏 const data = m.mark('modify') // 文字删除 ...

    【QCMS企业建站系统v5.0.2】开源版PHP轻量级系统+MVC架构+可以自定义模块+二次开发.zip

    10. 自定义页面 可通过后台添加自定义标签,页面,js,xml 11. 插件平台 插件机制和平台已创建好,官方会定期发布一些插件供大家下载.安装. 通过插件可以实现更多个性化的功能. 比如友情链接,支付宝插件, 地图接口, 12. ...

    【QCMS企业建站系统v5.0.2】开源版PHP轻量级系统+MVC架构+可以自定义模块+二次开发

    10. 自定义页面 可通过后台添加自定义标签,页面,js,xml 11. 插件平台 插件机制和平台已创建好,官方会定期发布一些插件供大家下载.安装. 通过插件可以实现更多个性化的功能. 比如友情链接,支付宝插件, 地图接口, 12. ...

    易打标-标准版条码标签打印软件

    软件简介: 易打标二维码条码生成打印软件,适用于:二维码生成,二维码,二维码制作,二维码生成器,条形码,RFID,24on云标签,易打标 条码生成,电商标签,防伪标签,物流标签,商品标签,销售标签,食品标签,珠宝标签,吊牌,...

    Struts1.0教程(简版)

    4. JSP 自定义标签库 - 43 - 4.1 概述 - 43 - 4.2 Struts包含的标签库 - 44 - 4.3 在Struts应用中使用标签库 - 44 - 4.4 Struts HTML标签库 - 45 - 5. 示例 - 52 - 5.1 命名规范 - 55 - 5.2 文件 - 55 - 5.3 CRUD - ...

    具有自定义标签的Ottoman.js的简单分页库。 :high_voltage:-JavaScript开发

    Ottoman Paginate:ice_cream:简介该插件受猫鼬-paginate的启发,提供了一种简单而优雅的方法来实现Ottoman.js的分页。 Ottoman Paginate:ice_cream:简介该插件受猫鼬-paginate的启发,提供了一种简单而优雅的方法来...

Global site tag (gtag.js) - Google Analytics