`
wang_zhi_peng2007
  • 浏览: 241250 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义标签使用

阅读更多

自定义标签:

 

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" />

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics