当前位置: 首页 > news >正文

千博网站建设上海app开发外包

千博网站建设,上海app开发外包,自我介绍html网页模板,网站主题分析转载自 javaweb学习总结(二十四)——jsp传统标签开发一、标签技术的API 1.1、标签技术的API类继承关系二、标签API简单介绍 2.1、JspTag接口JspTag接口是所有自定义标签的父接口#xff0c;它是JSP2.0中新定义的一个标记接口#xff0c;没有任何属性和方法。JspTag接口有Tag…转载自  javaweb学习总结(二十四)——jsp传统标签开发一、标签技术的API 1.1、标签技术的API类继承关系二、标签API简单介绍 2.1、JspTag接口JspTag接口是所有自定义标签的父接口它是JSP2.0中新定义的一个标记接口没有任何属性和方法。JspTag接口有Tag和SimpleTag两个直接子接口JSP2.0以前的版本中只有Tag接口所以把实现Tag接口的自定义标签也叫做传统标签把实现SimpleTag接口的自定义标签叫做简单标签。 2.2、Tag接口Tag接口是所有传统标签的父接口其中定义了两个重要方法doStartTag、doEndTag方法和四个常量EVAL_BODY_INCLUDE、SKIP_BODY、EVAL_PAGE、SKIP_PAGE这两个方法和四个常量的作用如下1WEB容器在解释执行JSP页面的过程中遇到自定义标签的开始标记就会去调用标签处理器的doStartTag方法doStartTag方法执行完后可以向WEB容器返回常量EVAL_BODY_INCLUDE或SKIP_BODY。如果doStartTag方法返回EVAL_BODY_INCLUDEWEB容器就会接着执行自定义标签的标签体如果doStartTag方法返回SKIP_BODYWEB容器就会忽略自定义标签的标签体直接解释执行自定义标签的结束标记。2WEB容器解释执行到自定义标签的结束标记时就会调用标签处理器的doEndTag方法doEndTag方法执行完后可以向WEB容器返回常量EVAL_PAGE或SKIP_PAGE。如果doEndTag方法返回常量EVAL_PAGEWEB容器就会接着执行JSP页面中位于结束标记后面的JSP代码如果doEndTag方法返回SKIP_PAGEWEB容器就会忽略JSP页面中位于结束标记后面的所有内容。从doStartTag和doEndTag方法的作用和返回值的作用可以看出开发自定义标签时可以在doStartTag方法和doEndTag方法体内编写合适的Java程序代码来实现具体的功能通过控制doStartTag方法和doEndTag方法的返回值还可以告诉WEB容器是否执行自定义标签中的标签体内容和JSP页面中位于自定义标签的结束标记后面的内容。 2.3、IterationTag接口IterationTag接口继承了Tag接口并在Tag接口的基础上增加了一个doAfterBody方法和一个EVAL_BODY_AGAIN常量。实现IterationTag接口的标签除了可以完成Tag接口所能完成的功能外还能够通知WEB容器是否重复执行标签体内容。对于实现了IterationTag接口的自定义标签WEB容器在执行完自定义标签的标签体后将调用标签处理器的doAfterBody方法doAfterBody方法可以向WEB容器返回常量EVAL_BODY_AGAIN或SKIP_BODY。如果doAfterBody方法返回EVAL_BODY_AGAINWEB容器就会把标签体内容再重复执行一次执行完后接着再调用doAfterBody方法如此往复直到doAfterBody方法返回常量SKIP_BODYWEB容器才会开始处理标签的结束标记和调用doEndTag方法。可见开发自定义标签时可以通过控制doAfterBody方法的返回值来告诉WEB容器是否重复执行标签体内容从而达到循环处理标签体内容的效果。例如可以通过一个实现IterationTag接口的标签来迭代输出一个集合中的所有元素在标签体部分指定元素的输出格式。在JSP API中也提供了IterationTag接口的默认实现类TagSupport我们在编写自定义标签的标签处理器类时可以继承和扩展TagSupport类这相比实现IterationTag接口将简化开发工作。 2.4、BodyTag接口BodyTag接口继承了IterationTag接口并在IterationTag接口的基础上增加了两个方法setBodyContent、doInitBody和一个EVAL_BODY_BUFFERED常量。实现BodyTag接口的标签除了可以完成IterationTag接口所能完成的功能还可以对标签体内容进行修改。对于实现了BodyTag接口的自定义标签标签处理器的doStartTag方法不仅可以返回前面讲解的常量EVAL_BODY_INCLUDE或SKIP_BODY还可以返回常量EVAL_BODY_BUFFERED。如果doStartTag方法返回EVAL_BODY_BUFFEREDWEB容器就会创建一个专用于捕获标签体运行结果的BodyContent对象然后调用标签处理器的setBodyContent方法将BodyContent对象的引用传递给标签处理器WEB容器接着将标签体的执行结果写入到BodyContent对象中。在标签处理器的后续事件方法中可以通过先前保存的BodyContent对象的引用来获取标签体的执行结果然后调用BodyContent对象特有的方法对BodyContent对象中的内容即标签体的执行结果进行修改和控制其输出。在JSP API中也提供了BodyTag接口的实现类BodyTagSupport我们在编写能够修改标签体内容的自定义标签的标签处理器类时可以继承和扩展BodyTagSupport类这相比实现BodyTag接口将简化开发工作。 2.5、 SimpleTag接口SimpleTag接口是JSP2.0中新增的一个标签接口。由于传统标签使用三个标签接口来完成不同的功能显得过于繁琐不利于标签技术的推广因此SUN公司为降低标签技术的学习难度在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口。SimpleTag接口与传统标签接口最大的区别在于SimpleTag接口只定义了一个用于处理标签逻辑的doTag方法该方法在WEB容器执行自定义标签时调用并且只被调用一次。那些使用传统标签接口所完成的功能例如是否执行标签体、迭代标签体、对标签体内容进行修改等功能都可以在doTag方法中完成。在JSP API中也提供了SimpleTag接口的实现类SimpleTagSupport我们在编写简单标签时可以继承和扩展SimpleTagSupport类这相比实现SimpleTag接口将简化开发工作。 2.6、传统标签接口中的各个方法可以返回的返回值说明下图列举了Tag接口、IterationTag接口和BodyTag接口中的主要方法及它们分别可以返回的返回值的说明。三、开发传统标签实现页面逻辑开发人员在编写Jsp页面时经常还需要在页面中引入一些逻辑例如 控制jsp页面某一部分内容是否执行。控制整个jsp页面是否执行。控制jsp页面内容重复执行。修改jsp页面内容输出。自定义标签除了可以移除jsp页面java代码外它也可以实现以上功能。 3.1、控制jsp页面某一部分内容是否执行  编写一个类实现tag接口控制doStartTag()方法的返回值如果这个方法返回EVAL_BODY_INCLUDE则执行标签体如果返回SKIP_BODY则不执行标签体。SUN公司针对tag接口提供了一个默认的实现类TagSupportTagSupport类中实现了tag接口的所有方法因此我们可以编写一个类继承TagSupport类然后再重写doStartTag方法。 示例代码如下 TagDemo1.java package me.gacl.web.tag;import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport;/*** author gacl* TagSupport类实现了Tag接口TagDemo1继承TagSupport类* */ public class TagDemo1 extends TagSupport {/* 重写doStartTag方法控制标签体是否执行* see javax.servlet.jsp.tagext.TagSupport#doStartTag()*/Overridepublic int doStartTag() throws JspException {//如果这个方法返回EVAL_BODY_INCLUDE则执行标签体如果返回SKIP_BODY则不执行标签体//return Tag.EVAL_BODY_INCLUDE;return Tag.SKIP_BODY;} }在WEB-INF目录下的tld文件中添加对该标签处理类的描述如下 tagnamedemo1/nametag-classme.gacl.web.tag.TagDemo1/tag-class!--demo1标签有标签体所以这里的body-content设置为JSP--body-contentJSP/body-content /tag在jsp页面中导入并使用自定义标签如下 % page languagejava pageEncodingUTF-8% %--在jsp页面中导入自定义标签库 --% %taglib uri/gacl prefixgacl % !DOCTYPE HTML htmlheadtitle控制标签体是否执行/title/headbody%--在jsp页面中使用自定义标签 demo1标签是带有标签体的标签体的内容是孤傲苍狼这几个字符串--%gacl:demo1孤傲苍狼/gacl:demo1/body /html运行效果如下3.2、控制整个jsp页面是否执行编写一个类实现tag接口控制doEndTag()方法的返回值如果这个方法返回EVAL_PAGE则执行标签余下的jsp页面如果返回SKIP_PAGE则不执行余下的jsp。 示例代码如下 TagDemo2.java package me.gacl.web.tag;import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport;/*** author gacl* TagSupport类实现了Tag接口TagDemo2继承TagSupport类*/ public class TagDemo2 extends TagSupport{/* 重写doEndTag方法控制jsp页面是否执行* see javax.servlet.jsp.tagext.TagSupport#doEndTag()*/Overridepublic int doEndTag() throws JspException {//如果这个方法返回EVAL_PAGE则执行标签余下的jsp页面如果返回SKIP_PAGE则不执行余下的jspreturn Tag.SKIP_PAGE;//return Tag.EVAL_PAGE;}}在WEB-INF目录下的tld文件中添加对该标签处理类的描述如下 tagnamedemo2/nametag-classme.gacl.web.tag.TagDemo2/tag-class!--demo2标签没有标签体所以这里的body-content设置为empty--body-contentempty/body-content /tag在jsp页面中导入并使用自定义标签如下 % page languagejava pageEncodingUTF-8% %--在jsp页面中导入自定义标签库 --% %taglib uri/gacl prefixgacl % !DOCTYPE HTML htmlheadtitle控制jsp页面是否执行/title/headbodyh1jsp页面的内容1/h1%--在jsp页面中使用自定义标签 demo2标签是不带标签体的--%gacl:demo2/h1jsp页面的内容2/h1/body /html运行效果如下3.3、控制jsp页面内容重复执行编写一个类实现Iterationtag接口控制doAfterBody()方法的返回值如果这个方法返回EVAL_BODY_AGAIN 则web服务器又执行一次标签体依次类推一直执行到doAfterBody方法返回SKIP_BODY则标签体才不会重复执行。 示例代码如下 TagDemo3.java package me.gacl.web.tag;import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.IterationTag; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport;public class TagDemo3 extends TagSupport {int x 5;Overridepublic int doStartTag() throws JspException {return Tag.EVAL_BODY_INCLUDE;}/* 控制doAfterBody()方法的返回值* 如果这个方法返回EVAL_BODY_AGAIN 则web服务器又执行一次标签体* 依次类推一直执行到doAfterBody方法返回SKIP_BODY则标签体才不会重复执行。* see javax.servlet.jsp.tagext.TagSupport#doAfterBody()*/Overridepublic int doAfterBody() throws JspException {x--;if(x0){return IterationTag.EVAL_BODY_AGAIN;}else{return IterationTag.SKIP_BODY;}}}在WEB-INF目录下的tld文件中添加对该标签处理类的描述如下  tagnamedemo3/nametag-classme.gacl.web.tag.TagDemo3/tag-class!--demo3标签有标签体所以这里的body-content设置为JSP--body-contentJSP/body-content /tag 在jsp页面中导入并使用自定义标签如下 % page languagejava pageEncodingUTF-8% %--在jsp页面中导入自定义标签库 --% %taglib uri/gacl prefixgacl % !DOCTYPE HTML htmlheadtitle控制页面内容重复执行5次/title/headbody%--在jsp页面中使用自定义标签 demo3标签--%gacl:demo3h3jsp页面的内容/h3/gacl:demo3/body /html运行效果如下3.4、修改jsp页面内容输出编写一个类实现BodyTag接口控制doStartTag()方法返回EVAL_BODY_BUFFERED则web服务器会创建BodyContent对象捕获标签体然后在doEndTag()方法体内得到代表标签体的bodyContent对象从而就可以对标签体进行修改操作。SUN公司针对BodyTag接口提供了一个默认的实现类BodyTagSupportBodyTagSupport类中实现了BodyTag接口的所有方法因此我们可以编写一个类继承BodyTagSupport类然后再根据需要重写doStartTag方法和doEndTag()方法。 示例代码如下 TagDemo4.java package me.gacl.web.tag;import java.io.IOException;import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyContent; import javax.servlet.jsp.tagext.BodyTag; import javax.servlet.jsp.tagext.BodyTagSupport; import javax.servlet.jsp.tagext.Tag;/*** author gacl* BodyTagSupport类实现了BodyTag接口接口TagDemo4继承 BodyTagSupport类*/ public class TagDemo4 extends BodyTagSupport {/* 控制doStartTag()方法返回EVAL_BODY_BUFFERED* see javax.servlet.jsp.tagext.BodyTagSupport#doStartTag()*/Overridepublic int doStartTag() throws JspException {return BodyTag.EVAL_BODY_BUFFERED;}Overridepublic int doEndTag() throws JspException {//this.getBodyContent()得到代表标签体的bodyContent对象BodyContent bodyContent this.getBodyContent();//拿到标签体String content bodyContent.getString();//修改标签体里面的内容将标签体的内容转换成大写String result content.toUpperCase();try {//输出修改后的内容this.pageContext.getOut().write(result);} catch (IOException e) {throw new RuntimeException(e);}return Tag.EVAL_PAGE;} }在jsp页面中导入并使用自定义标签如下 tagnamedemo4/nametag-classme.gacl.web.tag.TagDemo4/tag-class!--demo4标签有标签体所以这里的body-content设置为JSP--body-contentJSP/body-content /tag运行效果如下四、jsp传统标签开发总结在现在的jsp标签开发中很少直接使用传统标签来开发了目前用得较多的都是简单标签所以Jsp的传统标签开发了解一下即可下一篇重点介绍jsp简单标签的开发
http://www.pierceye.com/news/888471/

相关文章:

  • 网站建设服务费应计入什么科目装饰公司简介内容
  • 淘宝客网站域名备案吗漂亮的ppt模板大全免费
  • 西安外贸网站开发网站后端做留言板功能
  • 自建淘宝客APP网站模板制作网站的公司
  • 最佳线上网站制作模板网站开发 企业 定制系统
  • 怎么将网站设置为首页百度seoo优化软件
  • iis6建设网站浏览wordpress显示在线人数
  • 一键制作单页网站女做受网站
  • 网站推广广告 优帮云开发公司资质哪里查
  • 沈阳网站建设思路做海报的话网站
  • 扬州网站建设suteng崇左网页设计
  • 中文网站模板html做网站 最好的开源cms
  • 个人资料展示网站网站建设网络推广外包服务商
  • 外贸网站建设有什么需要注意的吗网站建设职业发展前景
  • 企业网站建设方案效果版权WordPress
  • 做网站知道访客ip汝州文明建设网站
  • 吴江建设局网站打不开了网站备案信息地址
  • 长沙网站建设优化局域网网站架设软件
  • 重庆企业网站建设解决方案seo关键词怎么优化
  • 信誉好的大良网站建设做的好的ppt下载网站有哪些
  • 栖霞网站定制手机网站图片自适应代码
  • 企业网站管理中心网站海外推广
  • 书店商城网站设计万网虚拟主机做网站教程
  • 文化类网站是不是休闲娱乐类网站wordpress插件 ftp
  • 织梦系统网站吉林省建设安全厅官方网站
  • 网站推广网站关键词排名怎么做建站教程wp
  • 用织梦系统做网站产权网站建设需要掌握什么技术
  • 南宁seo平台费用安徽网站关键词优化排名
  • 李贤威 wordpress甘肃搜索引擎网络优化
  • 网站建设的步骤图片过程9377将军