糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 自定义标签简介

自定义标签简介

时间:2020-04-16 15:08:59

相关推荐

自定义标签简介

自定义标签: 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 descriptor)( TLD ) 文件以查询相应的标签处理程序。 TLD 文件对于自定义标签处理程序,就像 Web 部署描述符对于 servlet 一样。 TLD 文件通常保存在 Web 应用程序的 WEB-INF 目录,它们一般以 .tld 扩展名结束。下面就是一个简单的 tld 文件 : <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>name</short-name> <tag> <name>MyTagName</name> <tag-class> 标签处理文件的完整的类名 </tag-class> <body-content>JSP</body-content> </tag> </taglib> 让我们更详细地分析一下这些标签: TLD 文件的根元素是</taglib>.它描述了一个标签库—— 即一组标签/标签处理程序对。 <tlib-version>元素对应于标签库版本。 <jsp-version>对应于标签库所依赖的 JSP 技术的版本。 <short-name>元素定义了 IDE 和其他开发工具可以使用的标签库的简单名。 <taglib>元素包含许多<tag>元素,标签库中每一个标签有一个<tag>元素。 <body-content>这里可以有四个值</body-content> empty:表示不能有标签体 JSP:标签体可以是任意一种JSP页面元素 scriptless:不能是JSP页面元素 tagdependent:由标签处理器去处理.jsp引擎不处理标签体, 给自定义标签定义属性: 先在java文件中定义属性和set方法. 然后在tld文件中加入: <attribute> <description>description</description>:对属性进行描述 <name>attributename</name>:为属性定义一个名称,不能以jsp,_jsp,java和sun开头. <required>true</required>:true表示此属性是必需的,false表示可有可无. <rtexprvalue>true</rtexprvalue>: true表示可以使用jsp表达式赋值. <type>ObjectType</type>:指定此属性的java类型. </attribute> 使用动态属性:在tld里面没写有哪些属性.利用集合来实现. 使用<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> <jsp:attribute name="fragment">aaaaaaaa</jsp:attribute> </it315:mytag> 使用下面这种方法时,要注意:如果标签有标签体,不能随便写了,应该这样: <jsp:body> 这里写你的标签体 </jsp:body> 标签库的描述和部署: jsp1.2:tld文件用的是dtd文件 jsp2.0:用的是xsd文件. 1. 可以<%@ taglib="" prefix=""%> 2. 在web.xml文件中 <web-app> <jsp-config> <taglib> <taglib-uri> 给标签库文件指定一个URI,任何有意义的名字都可以, 但是通常以”http://”打头 </taglib-uri> <taglib-location>标签库文件的位置</taglib-location> </taglib> </jsp-config> </web-app> 3.也可以把标签文件打成jar包放在web应用程序的lib目录下. 自定义标签的功能先介绍到这里,在下面的blog中再加上几个小例子.

如果觉得《自定义标签简介》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。