欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自定义标签使用

程序员文章站 2022-03-04 11:52:14
...

自定义标签:

 

1、实现自定义标签按如下步骤进行:

    (1)开发自定义标签处理类:

    (2)建立一个*.tld 文件,每个*.tld 文件对应一个标签库,每个标签库对应多个标签:

    (3)在web.xml文件中增加自定义标签的定义:

    (4)在JSP 文件中使用自定义标签。

 

2、开发自定义标签:

    自定义标签类都必须继承一个父类: java.Servlet.jsp.tagext.TagSupport 或者 BodyTagSupport。除此之外,自定义标签类还有如下要求。

  ·如果标签类包含属性,每个属性都有对应的getter 和setter 方法。

  ·重写doStartTag()或doEndTag()方法,这两个方法生成页面内容。

  ·如果需要在销毁标签之前完成资源回收,则重写re1ease()方法。

 

 3 .实现数据库连接的自定义标签

     (1) 开发自定义标签处理类:

package com.starit.tag;   
  
import java.io.Writer;   
import java.sql.Connection;   
import java.sql.DriverManager;   
import java.sql.ResultSet;   
import java.sql.ResultSetMetaData;   
import java.sql.SQLException;   
import java.sql.Statement;   
  
import javax.servlet.jsp.JspException;   
import javax.servlet.jsp.JspTagException;   
import javax.servlet.jsp.tagext.TagSupport;   
  
public class QueryTag extends TagSupport {   
    private static final long serialVersionUID = 3011647959966821883L;   
  
    // 标签的属性   
   private String driver;     
    private String url;   
    private String user;   
    private String pass;   
    private String sql;   
    // 执行数据库访问的对象   
    private Connection conn = null;   
    private Statement stmt = null;   
    private ResultSet rs = null;   
    private ResultSetMetaData rsmd = null;   
  
    @Override  
    public int doEndTag() throws JspException {   
        try {   
            // 注册驱动   
            Class.forName(driver);   
            // 获取数据库连接   
            conn = DriverManager.getConnection(url, user, pass);   
            // 创建Statement 对象   
            stmt = conn.createStatement();   
            // 执行查询   
            rs = stmt.executeQuery(sql);   
            rsmd = rs.getMetaData();   
            // 获取列数目   
            int columnCount = rsmd.getColumnCount();   
            // 获取页面输出流   
            Writer out = pageContext.getOut();   
            // 在页面输出表格   
            out.write("<table border='1' bgColor='9999cc'>");   
            // 遍历结果集   
            while (rs.next()) {   
                out.write("<tr>");   
                // 逐列输出查询到的数据   
                for (int i = 1; i <= columnCount; i++) {   
                    out.write("<td>");   
                    out.write(rs.getString(i));   
                    out.write("</td>");   
                }   
                out.write("</tr>");   
  
            }   
        } catch (Exception ex) {   
            ex.printStackTrace();   
            throw new JspTagException("错误");   
        }   
        return EVAL_PAGE;   
    }   
  
    public void destroy() {   
        // 关闭结果集   
        if (rs != null)   
            try {   
                rs.close();   
            } catch (SQLException sqle) {   
                sqle.printStackTrace();   
            }   
        // 关闭Statement   
        if (stmt != null)   
            try {   
                stmt.close();   
            } catch (SQLException sqle) {   
                sqle.printStackTrace();   
            }   
        // 关闭数据库连接   
        if (conn != null)   
            try {   
                conn.close();   
            } catch (SQLException sqle) {   
                sqle.printStackTrace();   
            }   
    }   
  
    public String getDriver() {   
        return driver;   
    }   
  
    public void setDriver(String driver) {   
        this.driver = driver;   
    }   
  
    public String getUrl() {   
        return url;   
    }   
  
    public void setUrl(String url) {   
        this.url = url;   
    }   
  
    public String getUser() {   
        return user;   
    }   
  
    public void setUser(String user) {   
        this.user = user;   
    }   
  
    public String getPass() {   
        return pass;   
    }   
  
    public void setPass(String pass) {   
        this.pass = pass;   
    }   
  
    public String getSql() {   
        return sql;   
    }   
  
    public void setSql(String sql) {   
        this.sql = sql;   
    }   

  
}  

 (2) 标签的配置文件配置

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"   
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
<taglib>  
 <tlib-version>1.0</tlib-version>  
 <jsp-version>1.2</jsp-version>  
 <tag>  
    <name>query</name>  
    <tag-class>com.starit.tag.QueryTag</tag-class>  
    <body-content>empty</body-content>  
       
    <attribute>  
        <name>driver</name>  
        <required>true</required>  
        <rtexprvalue>true</rtexprvalue>  
    </attribute>  
       
    <attribute>  
        <name>url</name>  
        <required>true</required>  
        <rtexprvalue>true</rtexprvalue>  
    </attribute>  
       
    <attribute>  
        <name>user</name>  
        <required>true</required>  
        <rtexprvalue>true</rtexprvalue>  
    </attribute>  
       
    <attribute>  
        <name>pass</name>  
        <required>true</required>  
        <rtexprvalue>true</rtexprvalue>  
    </attribute>  
       
    <attribute>  
        <name>sql</name>  
        <required>true</required>  
        <rtexprvalue>true</rtexprvalue>  
    </attribute>  
 </tag>    
</taglib>  

 

 

(3) 在web.xml文件中增加自定义标签的定义:

<jsp-config>  
    <!--增加自定义标签 -->  
    <taglib>  
        <!-- 确定标签库的URI-->  
        <taglib-uri>/tags/queryTag.tld</taglib-uri>  
        <!-- 确定标签库定义文件的位置 -->  
        <taglib-location>/WEB-INF/queryTag.tld</taglib-location>  
    </taglib>  
</jsp-config>  

 

(4) 在JSP 文件中使用自定义标签:

...

<!--引入自定义标签-->

<%@ taglib uri="/tags/queryTag.tld" prefix="mytag"%>

....

<!--使用自定义标签-->

<mytag:query user="root" url="jdbc:mysql://localhost:3306/test" pass="root" driver="com.mysql.jdbc.Driver" sql="select * from goods" />