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入门到精通教程
查看: 855|回复: 0

J2EE自定义标签的详细

[复制链接]

该用户从未签到

发表于 2011-9-25 13:23:52 | 显示全部楼层 |阅读模式
1,关于自定义标签的几个重要组成部分:
    继承的类:javax.Servlet.jsp.tagext.*:TagSupport
    一个属性: protected PageContext pageContext
    两个方法: public int doStartTag()
    public int doEndTag()
    三个常量: SKIP_BODY,SKIP_PAGE,EVAL_PAGE
    SKIP_PAGE,EVAL_PAGE是doEndTag()方法的返回值
    标签库描述文件 (*.tld)
    2,流程(工具:eclipse):
    1.新建一个web project
    2.在项目下新建一个包,包里建类,继承TagSupport
    3.完成标签处理类

    package demo.tag;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.TagSupport;
    import java.io.*;
    //需要导入的几个常用的包
    @SuppressWarnings(\"serial\")
    public class TagDemo extends TagSupport ...{
        private int pageSize;//pageSize属性,控制页面显示的个数,并且要生成get和set方法
        public int getPageSize() ...{
            return pageSize;
        }
        public void setPageSize(int pageSize) ...{
            this.pageSize = pageSize;
        }
    //    public int doEndTag() throws JspException {
    //        在这里没有用
    //        return super.doEndTag();
    //    }
        public int doStartTag() throws JspException ...{
            JspWriter out = pageContext.getOut();//用pageContext获取out,他还能获取session等,基本上jsp的内置对象都能获取,非常有用
            for (int i=0; i<pageSize; i++) ...{
                try ...{
                    out.println(\"<table>\");
                    out.println(\"<tr>\");
                    out.println(\"<td>\"); [Page]
                    out.println(i);
                    out.println(\"</td>\");
                    out.println(\"<td>\");
                    out.println(i*10);
                    out.println(\"</td>\");
                    out.println(\"</tr>\");
                    out.println(\"</table>\");
                } catch (IOException e) ...{
                    e.printStackTrace();
                }
            }
            return SKIP_BODY;
        }
    }


    1. 标签处理类应该继承自TagSupport类
    2. 标签处理类应该覆盖父类的至少一个方法 doStartTag() 或 doEndTag(),如果你覆盖是doStartTag()方法应该返回 SKIP_BODY,      如果你覆盖是doEndTag()方法应该返回 SKIP_PAGE,EVAL_PAGE
    3. 充分利用标签处理类的pageContext属性,可以通过该属性获取使用自定义标签的JSP页面的各种对象:
    getOut(): 获取JSP页面的输出流               out
    getRequest: 获取JSP页面的请求对象               request
    getSession: 获取JSP页面的会话对象          session
    getServletContext: 获取JSP页面的应用对象      application [Page]
    4. 如果我们要完成一个带属性自定义标签,需要在标签处理类声明相关属性
5.在WEB-INF下新建一个.tld文件完成标签库描述文件

    <?xml version=\"1.0\" encoding=\"UTF-8\"?>
    <!DOCTYPE taglib
            PUBLIC \"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN\"
        \"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd\">
    <taglib>
        <tlib-version>1.0</tlib-version>
        <jsp-version>1.2</jsp-version>
        <short-name>MyTagLib</short-name>
        <tag>
            <name>showDataTag</name>
            <tag-class>demo.tag.TagDemo</tag-class>
            <attribute>
                <name>pageSize</name>
                <required>true</required>
                <type>Integer</type>
            </attribute>
        </tag>
    </taglib>

    1. 标签库描述文件必须以 tld 为 文件的后缀名
    2. 标签库描述文件应该遵守 xml 语法要求
    3. 标签库描述文件的根元素 必须是 <taglib>
    4. taglib根元素下必须完成以下四个子元素
    tlib-version :  jsp-version:       short-name: 标签库描述文件的简要说明,且只能出现一次
    tag: 能出现一到多次 , 描述标签库中的标签名及你要对应的标签处理类
    5. tag元素下出现的子元素:
    name子元素:标签名
    tag-class子元素:对应的标签处理类
    attribute子元素:该标签应包含的属性
    6. attribute元素下出现的子元素:
    name:属性名
    required:该属性名可不可省略
    type:标签处理类中相关属性的类型
    5.在web.xml引入标签库描述文件

    <?xml version=\"1.0\" encoding=\"UTF-8\"?> [Page]
    <web-app version=\"2.4\"
        xmlns=\"http://java.sun.com/xml/ns/j2ee\"
        xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
        xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <jsp-config>
          <taglib>
              <taglib-uri>MyFirstTag</taglib-uri>
              <taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>
          </taglib>
      </jsp-config>
    </web-app>

    1. 在web.xml中实现taglib元素的子元素:
    taglib-location: 标签库描述文件在Web应用中的相对路径
    <taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>
    taglib-uri:该标签库在JSP中用什么名字来调用
    <taglib-uri>abc</taglib-uri>
    2. 在要调用标签库的JSP中声明
    声明:<%@ taglib uri=\"MyFirstTag\" prefix=\"suibian\" %>
    调用:<suibian:showDataTag pageSize=\"10\"></suibian:showDataTag>
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 04:18 , Processed in 0.431304 second(s), 49 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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