自定义标签之 SimpleTag的开发

先看一下SimpleTag的生命周期
1:每次遇到标签时,容器构造一个SimpleTage的实例,并且这个构造方法没有参数。和经典的标签是一样的,SimpleTag不能进行 缓冲,故不能重用,每次都需要构造新的实例。
2:调用民构造方法后,就用setJspContext()和setParent()方法,只有这个标签在另一个标签内时,才调用setParent()方法。
3:容器调用每个属性的setter方法以设置这些属性的值。
4:如果存在Body,那么就使用setJspBody方法设置这个标签的标签体。
5:容器调用doTag方法,所有的标签的逻辑,迭代和Body计算都在这个方法中。
6:当doTag方法返回时,所有参数都被锁定。
HelloWorld
还是从HelloWorld开始,标签需要实现SimpleTag接口。
None.gif package  eflylab;
None.gif
None.gif
import  javax.servlet.jsp.JspException;
None.gif
import  javax.servlet.jsp.tagext.SimpleTagSupport;
None.gif
import  java.io.IOException;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public   class  HelloWorldSimpleTag  extends  SimpleTagSupport  dot.gif {
InBlock.gif    
InBlock.gif    
public void doTag() throws JspException, IOException 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        getJspContext().getOut().write( 
"<table border=1><tr bgcolor=9944cc><td>simpeltag测试</tr></td><tr tr=cc44cc><td>helloWorld!</td></tr></table>" );
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
可以看出,这个标签的作用就是输出一个表格,表格中间带有HelloWorld的字样。
下面是描述文件中的声明
None.gif   < tag >
None.gif    
< description > Outputs Hello, World </ description >
None.gif        
< name > helloWorld </ name >
None.gif    
< tag-class > eflylab.HelloWorldSimpleTag </ tag-class >
None.gif    
< body-content > empty </ body-content >
None.gif
</ tag >
测试代码
ExpandedBlockStart.gif ContractedBlock.gif <% dot.gif @ page contentType="text/html; charset=gb2312" language="java"  %>
ExpandedBlockStart.gifContractedBlock.gif
<% dot.gif @ taglib uri="/demotag" prefix="mt" %>  
None.gif
< html >
None.gif  
< head >
None.gif    
< title > JSP 2.0 Examples - 简单的标签 </ title >
None.gif  
</ head >
None.gif  
< body >
None.gif    
< h1 > JSP 2.0 Examples - 简单的标签 </ h1 >
None.gif    
< hr >
None.gif    
< p > 这里是一个非常简单的标签. </ p >
None.gif    
< br >
None.gif    
< b >< u > Result: </ u ></ b >
None.gif    
< mt:helloWorld />
None.gif  
</ body >
None.gif
</ html >
运行如下:
 

实例开发:
上面是简单的HelloWorld,下面写一个简单的实例这个标签直接操作文件系统,它的使用就像是<img src=""/>HTML标签一样方便。
None.gif package  eflylab;
None.gif
None.gif
import  javax.servlet.jsp.JspException;
None.gif
import  javax.servlet.jsp.tagext.SimpleTagSupport;
None.gif
import  java.io. * ;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public   class  FileTag  extends  SimpleTagSupport  dot.gif {
InBlock.gif    
private String fileName;
InBlock.gif    
public void setFileName(String fileName)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
this.fileName=fileName;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
public void doTag() throws JspException, IOException
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        BufferedReader in
=new BufferedReader(new FileReader(fileName));
InBlock.gif        String temp
="";
InBlock.gif        String fileContent
="";
InBlock.gif        
while((temp=in.readLine())!=null)
InBlock.gif        fileContent
+=temp;
InBlock.gif        in.close();
InBlock.gif        getJspContext().getOut().write( 
"<table border=1><tr bgcolor=9944cc><td>文件标签</tr></td><tr bgcolor=cc44cc><td>"+fileContent+"</td></tr></table>" );
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
FileTag和HelloWorldTag之类的标签其实没有什么大的区别,只是它的业务逻辑不同而已。FileTag直接操作文件系统,并且从文件系统中读取内容显示到table中。和经典的标签一样,SimpleTag也可以有属性。FileTag有一个FileName的属性,这个属性用于表示文件的路径和名字。
描述如下:
None.gif   < tag >     
None.gif        
< name > file </ name >
None.gif        
< tag-class > eflylab.FileTag </ tag-class >
None.gif        
< body-content > empty </ body-content >
None.gif        
< attribute >
None.gif              
< name > fileName </ name >
None.gif              
< required > true </ required >
None.gif              
< rtexprvalue > true </ rtexprvalue >
None.gif          
</ attribute >
None.gif     
</ tag >  
测试代码:
ExpandedBlockStart.gif ContractedBlock.gif <% dot.gif @ page contentType="text/html; charset=gb2312" language="java"  %>
ExpandedBlockStart.gifContractedBlock.gif
<% dot.gif @ taglib uri="/demotag" prefix="mt" %>  
None.gif
< html >
None.gif  
< head >
None.gif    
< title > JSP 2.0 Examples - 文件标签 </ title >
None.gif  
</ head >
None.gif  
< body >
None.gif    
< h1 > JSP 2.0 Examples - 文件标签 </ h1 >
None.gif    
< hr >
None.gif    
< p > 这个标签可以直接使用文件. </ p >
None.gif    
< br >
None.gif    
< b >< u > Result: </ u ></ b >
None.gif    
< mt:file  fileName ="c:\\MyService.log" />
None.gif  
</ body >
None.gif
</ html >
None.gif
运行 :
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值