首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 操作系统-> Windows 2000教程
自定义JSP标签(tag)浅议-JSP教程,Jsp/Servlet
作者:网友供稿 点击:425
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
因为版本变化的关系,这篇文章未必有普适性



看这篇文章之前应该先看sun的文章并最好动手实践之

http://java.sun.com/developer/technicalarticles/xml/webappdev3/

并且知道j2ee api文档的位置在

http://java.sun.com/j2ee/sdk_1.3/techdocs/api/index.html



自定义tag其实并不是一件很困难的事情,就是猛一接触,不知道该从何下手。推荐先看看sun公司的一篇文章,看完了,大致就有了一个印象。在这里无意去翻译这篇简单的文章,而是从这篇文章展开去说说。要说明的一点就是sun的文档中代码都是完全可用的,但是因为排版问题,代码的分行有些地方不正确,直接copy的时候要仔细整理一下代码,否则有可能会通不过编译,部署的时候会给你一大堆异常。



自定义tag使用的包是javax.servlet.jsp.tagext,如果编译有问题,可以去tomcat的\common\lib文件夹下面找jsp-api.jar引用上就可以了。



这个包里面的类和接口,基本上我们主要关心的就是以“tag”结尾的那几个,接口tag和bodytag,类tagsupport和bodytagsupport,还有一个接口iterationtag,不过一般不会用到。其他的我们都可以看作是辅助类,帮助获取信息什么的。我们可以仔细看看j2ee的api文档里面关于这个包的类说明。



上面类名里面的body的意思可能一下子比较难理解。tag指的就是像<tagname></tagname>这样的东西,body就是夹在tag中间的东西,比如<tagname>i am body</tagname>。这么一来,这个tag也就成了bodytag,因为它可以带body。所以设计tag也要事先考虑好带不带body,不过现实考虑,好像没有body的tag应该也比较少吧。



tag接口是这些类里面的根,所以先看看里面有什么。api文档里面那个lifecycle图画的很粗糙,不过也能大致看清楚。我们也不过分纠缠细节,大致关心的就是dostarttag() 和doendtag() 这一段。每当你写的tag在jsp页面里面要被解释的时候,服务器就自动调用你的类里面的dostarttag()函数来完成你定义的逻辑,当解析完标签后调用doendtag()。实现tag接口来定制自己的tag无疑是最灵活的。但是,难度也比较大,我们定义自己的tag的时候完全不必要搞得这么有内涵。

bodytag跟tag类也差别不大,bodytag继承自tag和iterationtag,因为涉及了body的原因,逻辑要复杂一些。api文档里面的lifecycle图也比较清晰。有必要好好看看。里面主要说明的就是函数调用的顺序。但是在具体应用中,不一定都要按部就班的走完这整个lifecycle,如果要想控制这些调用的路线。就要借用函数的返回值了,在上一个函数返回特定的值(都是已经定义好的常数)就可以改变服务器调用下一个函数的行为来完成你自己的逻辑。看到这里我也不禁佩服这些写类库的人,能想出这么个办法来解决问题。



为了方便我们开发,又提供了两个带“support”的类来“支持”我们,方便我们开发。一般情况下我们只要继承这两个类中的一个,而且我觉得bodytagsupport也更常用一些好像。要说明的一点就是两个support类中tagsupport是bodytagsupport的父类。类中的getid()和setid()这两个函数名并不是死的,这两个“id”应该在你的程序中替换成你的标签名,比如你的tag名字是tagname,就是<tagname>,那么函数名就变成了gettagname ()和gettagname ()。这样的搞法原来在其他地方也有领教。(注意tagname第一个字母在函数名中大写)变化的名字有服务器自己去处理,无需编程者自己操心。原来函数名都是可以变化的,一定要注意。



说到这里可以结合sun的文档的代码看看,就明白了。



至于部署和.tlb文件的格式,sun文档上也都有。不再赘述。最后附上整理的返回值列表,这个我认为比较重要。



英文evaluate大致是“评估,求值”的意思,这里我们可以理解为服务器“读取,读入,处理”的意思,翻译的时候我就随语境变通一下,下面加了下划线,如果有不当,请指正。




eval_body_include:把body读入存在的输出流中,dostarttag()函数可用


eval_page:继续处理页面,doendtag()函数可用


skip_body:忽略对body的处理,dostarttag()和doafterbody()函数可用


skip_page:忽略对余下页面的处理,doendtag()函数可用


eval_body_tag:已经废止,由eval_body_buffered取代


eval_body_buffered:申请缓冲区,由setbodycontent()函数得到的bodycontent对象来处理tag的body,如果类实现了bodytag,那么dostarttag()可用,否则非法


eval_body_again:请求继续处理body,返回自doafterbody(),这个返回值在你制作循环tag的时候是很有用的。我观察了一下jstl的源代码,想看看它的foreach怎么编制的,但是一看里面逻辑异常复杂,短时间不能看出头绪,所以在这里也不敢妄言,如果哪位仁兄有研究,还请不吝赐教。



:包里面的其他类还没有研究,如果有研究再另行写个文档。



文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·三层结构ASP.NET程序中,把实体类自动显示在页面上的例子(c#)-.NET教程,Asp.Net开发
·windows 2000 server系统帐号安全设置技巧
·java-汉字问题深入谈-JSP教程,Java技巧及代码
·asp.net 2.0下一个标准GRIDVIEW功能的实现(不用datasource控件)-.NET教程,Asp.Net开发
·自定义JSP标签(tag)浅议-JSP教程,Jsp/Servlet
·DataGrid输出到Excel并进行格式化处理-.NET教程,数据库应用
·The key of C# 学习笔记II-.NET教程,C#语言
·windows 2000操作系统启动菜单详解
·GridView的几个事件(如实现: 行的双击/单击/捕捉键盘按键/鼠标悬浮/移出效果)(示例代码下载)-.NET教程,评论及其它
·发邮件的JAVA程序-JSP教程,邮件相关
最新文章
·在vista系统中任意设定鼠标滚动行数_windows vista
·英文blog赚钱的几个方向_网赚技巧
·做google adsense必备的点击统计软件asrep_网赚技巧
·十大adsense工具! top 10 adsense tools_网赚技巧
·php5对mysql5的任意数据库表的管理代码示例(四)_php技巧
·php5对mysql5的任意数据库表的管理代码示例(二)_php技巧
·用好的设计替代不好的_站长心得
·个人网站的常见五大弊病_站长心得
·使用google的广告十天后的观感和博客的钱途_google推广
·关于google adsense的几个敏感问题_google推广
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭