Jsp 应用之自定义标签库(taglib)及配置

转载 2007年09月19日 16:14:00

前段时间看到关于taglib的一些应用,感觉很神秘,刚开始的时候还弄不明白taglib到底有什么作用,在图书馆查了几次资料,终于搞明白了,今天学习taglib的编写及配置,现在写出今天学习的总结。

taglib的主要作用就是:对一些需要重复利用的代码段进行封装,并设置该代码段可能用到的属性,提高代码的利用率。taglib主要有三个部分构成:

  1. 实现代码段的.java文件;
  2. 标签库描述文件.tld;
  3. web.xml的配置。

下面首先介绍标签实现文件,这里以DecorTag.java实现的标签为例:

//DecorTag.java

/*
 * DecorTag.java
 *
 * Created on 2007年3月17日, 上午8:25
 */

package com.wlmzfx.servlet;

import javax.servlet.jsp.*;//jsp类
import javax.servlet.jsp.tagext.*;//标签类库
import java.io.IOException;

//这里实现一个用html表格显示一个装饰框

public class DecorTag extends TagSupport{

    //这些字段用来控制外观
    String align;//对齐方式
    String title;//标题
    String titleColor;//标题前景色
    String titleAlign;//标题对齐方式
    String color;//方框背景色
    String borderColor;//边框颜色
    String margin;//边框与内容之间的像素
    String borderWidth;//边框宽度的像素值
    //以下方法用来设置各种属性值,是必不可少的,在jsp页面使用标签时,属性将转化为方法调用
    public void setAlign(String value){
        this.align = value;
    }
   
    public void setTitle(String value){
        this.title = value;
    }
   
    public void setTitleColor(String value){
        this.titleColor = value;
    }
   
    public void setTitleAlign(String value){
        this.titleAlign = value;
    }
   
    public void setColor(String value){
        this.color = value;
    }
   
    public void setBorderColor(String value) {
        this.borderColor = value;
    }
   
    public void setMargin(String value){
        this.margin = value;
    }
   
    public void setBorderWidth(String value){
        this.borderWidth = value;
    }
   
   
    public void setPageContext(PageContext context){

        //以超类保存页面环境对象,下面的Tag()要用到,这很重要
        super.setPageContext(context);
        //设置属性的默认值
        align = “cente”;
        title = null;
        titleColor = “White”;
        titleAlign = “left”;
        color = “lightblue”;
        borderColor = “black”;
        margin = “20″;
        borderWidth = “4″;
    }
   

    /**
      *此方法再遇到<decor:box>标签时调用
   **/
    public int doStartTag() throws JspException{
        try{
            //从PageContext对象获取输出流并传给setPageContext()方法
            JspWriter out = pageContext.getOut();
           
            out.print(”<div align=’”+align+”‘>”+”<table bgcolor=’”+borderColor+”‘”+”<border=’0′ cellspacing=’0′”+”cellpadding=’”+borderWidth+”‘”);
           
            if(title != null)
                out.print(”<tr><td align=’”+titleAlign+”‘>”+”<font face=’helvetica’ size=’+1′ “+”color=’”+titleColor+”‘><br>”+title+”</b></font></td><td>”);
           
            out.print(”<tr><td<table bgcolor=’”+color+”‘”+”border=’0′ cellspacing=’0′”+”cellpadding=’”+margin+”‘><tr><td>”);
        }catch(IOException e){
            throw new JspException(e.getMessage());
        }
        //返回值告诉Jsp类处理标签主题
        return EVAL_BODY_INCLUDE;
    }
    //在遇到</decor:box>结束标签时调用
    public int doEndTag()throws JspException{
        try{
            JspWriter out = pageContext.getOut();
            out.println(”</td></tr></table><td><tr><table></div>”);
        }catch(IOException e){
            throw new JspException(e.getMessage());
        }
        //返回值指示继续处理Jsp页面
        return EVAL_PAGE;
    }
   
}

//decor_1_0.tld(放在WEB-INF/tids/decor_1_0.tld
//一般以后缀_1_0来表示tld文件的版本,实际上这也是个xml文件

<?xml version=”1.0″ encoding=”UTF-8″?>
<taglib version=”2.0″ 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 web-jsptaglibrary_2_0.xsd”>
    <tlib-version>1.0</tlib-version><!–文件版本–>
    <short-name>decor</short-name><!–库名–>
    <uri>http://www.wlmzfx.com/tlds/decor_1_0.tld</uri><!–唯一标识符–>
    <tag><!–首先定义了标签库的一个标签–>
        <name>box</name><!–首先定义标签名,实现类–>
        <tagclass>com.wlmzfx.servlet.DecorTag</tagclass>
        <!–定义标签库的每一个属性–>
        <attribute>
            <name>align</name><!–属性–>
            <required>false</required><!–不是必须–>
            <rtexprvalue>true</rtexprvalue><!–应有<%= %>值–>
        </attribute>
        <attribute>
            <name>color</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>bordercolor</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>margin</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>borderWidth</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>title</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>titleColor</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>titleAlign</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>    
    </tag>
    <!– A validator verifies that the tags are used correctly at JSP
         translation time. Validator entries look like this:
      <validator>
          <validator-class>com.mycompany.TagLibValidator</validator-class>
          <init-param>
             <param-name>parameter</param-name>
             <param-value>value</param-value>
   </init-param>
      </validator>
   –>
    <!– A tag library can register Servlet Context event listeners in
        case it needs to react to such events. Listener entries look
        like this:
     <listener>
         <listener-class>com.mycompany.TagLibListener</listener-class>
     </listener>
    –>
</taglib>

然后需要在web.xml中配置该标签,在web.xml中添加下面的内容:

    <taglib>
        <!–看到标签库唯一标识符时–>
        <taglib-uri>http://www.wlmzfx.com/tlds/decor_1_0.tld</taglib-uri>
         <!–使用标签库描述文件的本地副本–>
        <taglib-location>tlds/decor_1_0.tld</taglib-location>
    </taglib>

下面以一个例子来说明该标签库的用法:

          在任何jsp页面中加入下面的代码:
          <!–这里仅仅定义了title,color,margin属性–>
          <decor:box title=”LogOut when Done” color=”red” margin=”100″>
          <!–这里添加表格的内容,这里可以继续使用<decor:box>标签,但是同样必须以</decor:box>结束–>
          内容在这里
         </decor:box>

 

jsp的taglib指令用法

Taglib 指令是定义一个标签库以及其自定义标签的前缀.。 需要导入standard.jar jsp-api.jar 两个包 下载地址prefix 是一个标签库别名 taglib的uri ...
  • q601115211
  • q601115211
  • 2017年01月11日 07:33
  • 9416

jsp中的taglib

. JSP中使用Taglib          标准的JSP标记可以调用JavaBeans组件或者执行客户的请求,这大大降低了JSP开发的复杂度和维护量。JSP技术也允许你自定义的taglib,其...
  • u011513323
  • u011513323
  • 2014年07月29日 15:48
  • 8594

自己写的taglib例子

 自己写了一个获取当前时间的标签java:/* * Created on 2005-1-5 * * TODO To change the template for this generated fil...
  • changemyself
  • changemyself
  • 2007年05月15日 18:56
  • 2536

java web taglib自定义标签的练习

整理了一下以前的练习,把jsp tag的练习记录一下: 新建mytag.tld:放置在web-inf下面: 1.0 1.1 displayDate c...
  • zyujie
  • zyujie
  • 2013年03月29日 11:27
  • 8116

struts-taglib-1.3.8

  • 2014年08月04日 16:03
  • 246KB
  • 下载

JSP页面中实现使用taglib导入库时自动提示(JSTL 库安装)

默认情况下,taglib导入标签库uri时,没有提示如下图:所以我们需要导入安装jstl标签 JSTL 库安装 Apache Tomcat安装JSTL 库步骤如下: 从Apache的标准标签库中...
  • baidu_37107022
  • baidu_37107022
  • 2017年05月24日 17:01
  • 1679

(六)Webxml文件中添加taglib以及在页面中使用标签

在web.xml文件中添加tablib 标签库唯一访问标识(必须与标签库tld描述文件中的uri一致) 标签库tld描述文件本地路径(如/WEB-INF/mytag.tld) ...
  • liaoxiaohua1981
  • liaoxiaohua1981
  • 2011年10月14日 15:57
  • 2935

Taglib自定义标签之二带属性标签

上次介绍了简单的taglib自定义标签,发现单纯的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的类展现我需要的内容,下...
  • aionbo
  • aionbo
  • 2017年02月09日 21:50
  • 512

JSTL标签库核心标签C标签的使用

一、jstl标签介绍:jstl标签是为了解决EL表达式不能循环取出集合对象的问题,是建立在EL表达式基础上的语言,两者之间是互通的,属于jsp外部的一个标准标签,库导入标签格式为:二、核心标签C标签使...
  • javaloveiphone
  • javaloveiphone
  • 2015年12月07日 18:27
  • 5722

<%@ taglib uri="" prefix=""%> 使用

在早期的jsp开发中,是使用java代码来控制逻辑和显示的,但这样会给前端开发人员带来些麻烦并且代码的可读性也会降低。为了解决上述情况,标签库被创造出来了。标签库的目的在于让开发人员能像使用html标...
  • zhenwodefengcaii
  • zhenwodefengcaii
  • 2017年01月18日 17:36
  • 11131
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jsp 应用之自定义标签库(taglib)及配置
举报原因:
原因补充:

(最多只允许输入30个字)