Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 329|回复: 0

[jsp学习]JSP自定义标签之 SimpleTag

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-2 08:54:14 | 显示全部楼层 |阅读模式
    先看一下SimpleTag的生命周期

    1:每次遇到标签时,容器构造一个SimpleTage的实例,并且这个构造方法没有参数。SimpleTag不能进行缓冲,故不能重用,每次都需要构造新的实例。
                                                                                          
    2:调用构造方法后,就用setJspContext()和setParent()方法,只有这个标签在另一个标签内时,才调用setParent()方法。

    3:容器调用每个属性的setter方法以设置这些属性的值。

    4:如果存在Body,那么就使用setJspBody方法设置这个标签的标签体。

    5:容器调用doTag方法,所有的标签的逻辑,迭代和Body计算都在这个方法中。
      
      
      
       
       
        6:当doTag方法返回时,所有参数都被锁定。
    还是从HelloWorld开始,标签需要实现SimpleTag接口。
    package
         eflylab;


        import
         javax.Servlet.jsp.JspException;

        import
         javax.servlet.jsp.tagext.SimpleTagSupport;

        import
         java.io.IOException;


        public
         
        class
         HelloWorldSimpleTag
        extends
         SimpleTagSupport
       
        {
       
        public void doTag() throws JspException, IOException
        {
            getJspContext().getOut().write( "<table border=1><tr bgcolor=9944cc><td>simpeltag测试</td></tr><tr bgcolor=cc44cc><td>helloWorld!</td></tr></table>" );
        }
    }
       

        可以看出,这个标签的作用就是输出一个表格,表格中间带有HelloWorld的字样。
    下面是描述文件中的声明
       
       
         
        <
        tag
        >
       
       
        <
        description
        >
        Outputs Hello, World
        </
        description
        >
       
            
        <
        name
        >
        helloWorld
        </
        name
        >
       
       
        <
        tag-class
        >
        eflylab.HelloWorldSimpleTag
        </
        tag-class
        >
       
       
        <
        body-content
        >
        empty
        </
        body-content
        >
       

        </
        tag
        >
        测试代码
       
       
       
        <%
       
        @ page contentType="text/HTML; charset=gb2312" language="java"
        %>
       

        <%
       
        @ taglib uri="/demotag" prefix="mt"
        %>
         

        <
        html
        >
       
      
        <
        head
        >
       
       
        <
        title
        >
        JSP 2.0 Examples - 简单的标签
        </
        title
        >
       
      
        </
        head
        >
       
      
        <
        body
        >
       
       
        <
        h1
        >
        JSP 2.0 Examples - 简单的标签
        </
        h1
        >
       
       
        <
        hr
        >
       
       
        <
        p
        >
        这里是一个非常简单的标签.
        </
        p
        >
       
       
        <
        br
        >
       
       
        <
        b
        ><
        u
        >
        Result:
        </
        u
        ></
        b
        >
       
       
        <
        mt:helloWorld
        />
       
      
        </
        body
        >
       

        </
        html
        >
        运行如下:


    实例开发:
    上面是简单的HelloWorld,下面写一个简单的实例这个标签直接操作文件系统,它的使用就像是<img src=""/>HTML标签一样方便。
       
       
        package
         eflylab;


        import
         javax.servlet.jsp.JspException;

        import
         javax.servlet.jsp.tagext.SimpleTagSupport;

        import
         java.io.
        *
        ;


        public
         
        class
         FileTag
        extends
         SimpleTagSupport
       
        {
        private String fileName;
        public void setFileName(String fileName)
        {
            this.fileName=fileName;
        }
        public void doTag() throws JspException, IOException
        {
            BufferedReader in=new BufferedReader(new FileReader(fileName));
            String temp="";
            String fileContent="";
            while((temp=in.readLine())!=null)
            fileContent+=temp;
            in.close();
            getJspContext().getOut().write( "<table border=1><tr bgcolor=9944cc><td>文件标签</tr></td><tr bgcolor=cc44cc><td>"+fileContent+"</td></tr></table>" );
        }
    }
       

        FileTag和HelloWorldTag之类的标签其实没有什么大的区别,只是它的业务逻辑不同而已。FileTag直接操作文件系统,并且从文件系统中读取内容显示到table中。和经典的标签一样,SimpleTag也可以有属性。FileTag有一个FileName的属性,这个属性用于表示文件的路径和名字。

    描述如下:

       
       
         
        <
        tag
        >
            
            
        <
        name
        >
        file
        </
        name
        >
       
            
        <
        tag-class
        >
        eflylab.FileTag
        </
        tag-class
        >
       
            
        <
        body-content
        >
        empty
        </
        body-content
        >
       
            
        <
        attribute
        >
       
                  
        <
        name
        >
        fileName
        </
        name
        >
       
                  
        <
        required
        >
        true
        </
        required
        >
       
                  
        <
        rtexprvalue
        >
        true
        </
        rtexprvalue
        >
       
             
        </
        attribute
        >
       
         
        </
        tag
        >
         
        测试代码:

       
       
       
        <%
       
        @ page contentType="text/html; charset=gb2312" language="java"
        %>
       

        <%
       
        @ taglib uri="/demotag" prefix="mt"
        %>
         

        <
        html
        >
       
      
        <
        head
        >
       
       
        <
        title
        >
        JSP 2.0 Examples - 文件标签
        </
        title
        >
       
      
        </
        head
        >
       
      
        <
        body
        >
       
       
        <
        h1
        >
        JSP 2.0 Examples - 文件标签
        </
        h1
        >
       
       
        <
        hr
        >
       
       
        <
        p
        >
        这个标签可以直接使用文件.
        </
        p
        >
       
       
        <
        br
        >
       
       
        <
        b
        ><
        u
        >
        Result:
        </
        u
        ></
        b
        >
       
       
        <
        mt:file
        fileName
        ="c:\MyService.log"
        />
       
      
        </
        body
        >
       

        </
        html
        >
       

        运行 :



       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/2/085412812.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 22:16 , Processed in 0.308625 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表