自定义标签使用
自定义标签:
?
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" />
?