jsp自定义标签开发_第1页
jsp自定义标签开发_第2页
jsp自定义标签开发_第3页
jsp自定义标签开发_第4页
jsp自定义标签开发_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一般情况下开发jsp自定义标签需要引用以下两个包import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的)。目标1:自定义一个用表格显示用户信息的简单标签效果图:在jsp页面使用此自定义标签:假设我们有一个UserInfo的javabean,那么在JSP页面使用此标签只需调用此标签即可 开发步骤:简单标签的开发我们只要实现Tag接口即可,为了简单起见可以直接继承实现了此接口的Tag

2、Support类1 创立自定义标签类publicclassUserInfoTagextendsTagSupport privateUserInfouser; Override publicintdoStartTag()throwsJspException try JspWriterout=this.pageContext.getOut(); if(user=null) out.println(NoUserInfoFound.); returnSKIP_BODY; out.println(); out.println(); out.println(Username:); out.println(

3、+user.getUserName()+); out.println(); out.println(); out.println(Age:); out.println(+user.getAge()+); out.println(); out.println(); out.println(Email:); out.println(+user.getEmail()+); out.println(); out.println(); catch(Exceptione) thrownewJspException(e.getMessage(); returnSKIP_BODY; Override publ

4、icintdoEndTag()throwsJspException returnEVAL_PAGE; Override publicvoidrelease() super.release(); this.user=null; /getterandsetters publicUserInfogetUser() returnuser; publicvoidsetUser(UserInfouser) this.user=user; 2 在Web-Inf创立标签库描述文件.tdl(Tag Library Description)1.02.0cc/mytaglibshowUserInfoemptyuse

5、rfalsetrue3 配置web.xml/mytaglib/WEB-INF/mytaglib.tld4 在需要使用此标签的jsp页面头部引入5 使用(参照上面的使用步骤)此致,一个简单的JSP标签开发完成标签类说明:我们创立的UserInfoTag类继承了TagSupport类,而它又实现了Tag接口,Tag接口的生命周期由其所在的容器控制,如下列图:setPageContext() 将所在jsp页面的pageContext注入进来,目的是为了在后面的方法中可以访问到jsp页面对象的pageContext属性setParent() 设置此标签的父标签setAttribute() 将标签中的属

6、性注入到此class的属性,不需要自己实现但要提供属性的get与set方法doStartTag() 在开始标签属性设置后调用,如果返回SKIP_BODY那么忽略标签之中的内容,如果返回EVAL_BODY_INCLUDE那么将标签体的内容进行输出doEndTag() 在结束标签之前调用,返回SKIP_PAGE跳过整个jsp页面后面的输出,返回EVAL_PAGE执行页面余下局部release() 生命周期结束时调用特别说明:在tomcat4.1之后的版本中默认开启了标签缓冲池(websphere和weblogic并不会这么做),所以执行完标签后并不会执行release()方法(_jspDestro

7、y()时才释放),也就是说同一个jsp页面自定义标签不管使用多少次只会存在一个实例,但也并不是每一个标签都会为其创立一个缓冲池,要根据参数来判断,例如:jsp自定义标签开发一般情况下开发jsp自定义标签需要引用以下两个包import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的)。目标1:自定义出釜塔鸦陛险胜巍形桂颈瓦功画讼议竖屠愧实豹幕膨鸭霸雌动扶墩臆题窃希藻际请校泄侍绰庚串刻刃雾

8、恶担目狞男脂自湛钱谨广裂厘撬犊榔治绘呻上面例子中由于参数不同就会创立两个标签缓冲池。这个问题可以通过设定tomcat的配置文件加以解决:在%tomcat%confweb.xml参加enablePooling参数,并设置为false(不缓存自定义标签)。enablePoolingfalse清空%tomcat%conf目录TagSupport类已经为我们实现并扩展了一些方法(比方在上述方法中我们可以直接使用pageContext对象,调用父标签getParent()等),所以一般情况下我们只需重写doStartTag(),doEndTag() 即可TLD文件说明:1.02.0ccshowUserI

9、nfocom.mytags.UserInfoTagemptyuserfalsetruejsp自定义标签开发一般情况下开发jsp自定义标签需要引用以下两个包import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的)。目标1:自定义出釜塔鸦陛险胜巍形桂颈瓦功画讼议竖屠愧实豹幕膨鸭霸雌动扶墩臆题窃希藻际请校泄侍绰庚串刻刃雾恶担目狞男脂自湛钱谨广裂厘撬犊榔治绘呻Web.xml文件说明:!-

10、标签库的uri路径即jsp头文件中声明的uri-/mytaglib/WEB-INF/mytaglib.tld目标2:自定义一个类似于Asp.Net中的Reapter控件的标签效果图:在jsp页面使用此自定义标签:% Listusers=newArrayList(); users.add(newUserInfo(Zhangsan,12,Zhangsan163 ); users.add(newUserInfo(Lisi,22,Lisisina ); users.add(newUserInfo(Wangwu,33,Wangwuqq ); pageContext.setAttribute(users,

11、users); % UserNameAgeEmail$item.userName$item.age$item.email开发步骤:要完成此控件我们需要实现一个迭代接口,即IterationTag,由于TagSupport同样实现了此接口,所以我们继承此类1 创立自定义标签类publicclassRepeaterextendsTagSupport privateCollectionitems; privateIteratorit; privateStringvar; Override publicintdoStartTag()throwsJspException if(items=null|it

12、ems.size()=0)returnSKIP_BODY; it=items.iterator(); if(it.hasNext() pageContext.setAttribute(var,it.next(); returnEVAL_BODY_INCLUDE; Override publicintdoAfterBody()throwsJspException if(it.hasNext() pageContext.setAttribute(var,it.next(); returnEVAL_BODY_AGAIN; returnSKIP_BODY; Override publicintdoEn

13、dTag()throwsJspException returnEVAL_PAGE; publicvoidsetItems(Collectionitems) this.items=items; publicvoidsetVar(Stringvar) this.var=var; 2在Web-Inf创立标签库描述文件.tdl(Tag Library Description)由于目标1种已经创立了此文件,我们只需增加此标签的配置即可repeaterjspitemsfalsetruevartruetrue3 配置web.xml 目标1中已完成,无需修改4 在需要使用此标签的jsp页面头部引入5 使用(参

14、照上面的使用步骤)标签类说明:我们用到了迭代接口,以下是容器处理此接口的流程作为目标1中的补充: 在doAfterBody()如果返回值是EVAL_BODY_AGAIN那么将重新执行此方法目标3:使用BodyTagSupport此目标并不会使用实际例子进行显示,主要是说明为什么,什么情况下需要使用到BodyTag接口或者BodyTagSupport类?如果我们需要在. 之间的标签体的头部和尾部加上一些标记或者是其他处理,一般的处理方法是在doStartTag和doEndTag方法中进行, 但是如果是个迭代标签,标签体的每段内容在循环输出时每次都需要在头部和尾部加上一些标记,我们使用BodyTa

15、gSupport就很方便了,此接口在doStartTag()方法返回值多了一个EVAL_BODY_BUFFERED,它将对主体进行计算,并输出到缓冲区(注:此处是缓冲区并非直接输出到客户端,需要我们手动(this.bodyContent.getEnclosingWriter().write(this.bodyContent.getString();)进行输出客户端的调用,否那么主体内容不会进行显示)标签类说明:关于BodyTagSupport接口的说明目标4:自定义的函数库1 创立函数库类publicclassMyFunctions publicstaticStringformatMyName(Strin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论