特别说明:如果能帮助到您,请您留下点滴痕迹,让我知道我的存在是有意义的;如果不能帮助到您,请接受我的歉意;
文章简介:本文说明带属性的标签如何定义。QueryTag标签为连接数据库并取得到数据,最后显示出来!
=>QueryTag.java
package lee;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
import java.sql.*;
/**
* QueryTag_class
* description:带属性标签体,查询标签;
* @author cyb_23
* @version 1.0
*/
public class QueryTag extends SimpleTagSupport
{
//标签的属性
private String driver;
private String url;
private String user;
private String pass;
private String sql;
//driver属性的setter和getter方法
public void setDriver(String driver)
{
this.driver = driver;
}
public String getDriver()
{
return this.driver;
}
//url属性的setter和getter方法
public void setUrl(String url)
{
this.url = url;
}
public String getUrl()
{
return this.url;
}
//user属性的setter和getter方法
public void setUser(String user)
{
this.user = user;
}
public String getUser()
{
return this.user;
}
//pass属性的setter和getter方法
public void setPass(String pass)
{
this.pass = pass;
}
public String getPass()
{
return this.pass;
}
//sql属性的setter和getter方法
public void setSql(String sql)
{
this.sql = sql;
}
public String getSql()
{
return this.sql;
}
//conn属性的setter和getter方法
public void setConn(Connection conn)
{
this.conn = conn;
}
public Connection getConn()
{
return this.conn;
}
//stmt属性的setter和getter方法
public void setStmt(Statement stmt)
{
this.stmt = stmt;
}
public Statement getStmt()
{
return this.stmt;
}
//rs属性的setter和getter方法
public void setRs(ResultSet rs)
{
this.rs = rs;
}
public ResultSet getRs()
{
return this.rs;
}
//rsmd属性的setter和getter方法
public void setRsmd(ResultSetMetaData rsmd)
{
this.rsmd = rsmd;
}
public ResultSetMetaData getRsmd()
{
return this.rsmd;
}
//执行数据库访问的对象
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private ResultSetMetaData rsmd = null;
public void doTag() throws JspException,IOException
{
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 = getJspContext().getOut();
//在页面输出表格
out.write("<table border='1' bgColor='#9999cc' width='400'>");
//遍历结果集
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(ClassNotFoundException cnfe)
{
cnfe.printStackTrace();
throw new JspException("自定义标签错误" + cnfe.getMessage());
}
catch (SQLException ex)
{
ex.printStackTrace();
throw new JspException("自定义标签错误" + ex.getMessage());
}
finally
{
//关闭结果集
try
{
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
catch (SQLException sqle)
{
sqle.printStackTrace();
}
}
}
}
=>mytaglib.tld
<?xml version="1.0" encoding="GBK"?>
<taglib 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"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<!-- 标签库URI -->
<uri>http://www.crazyit.org/mytaglib</uri>
<!-- 定义第一个标签 -->
<tag>
<!-- 定义标签名 -->
<name>helloWorld</name>
<!-- 定义标签处理类 -->
<tag-class>lee.HelloWorldTag</tag-class>
<!-- 定义标签体为空 -->
<body-content>empty</body-content>
</tag>
<!-- 定义第二个标签 -->
<tag>
<name>query</name>
<tag-class>lee.QueryTag</tag-class>
<body-content>empty</body-content>
<!-- 配置标签属性:driver -->
<attribute>
<name>driver</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 配置标签属性:url -->
<attribute>
<name>url</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 配置标签属性:user -->
<attribute>
<name>user</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 配置标签属性:pass -->
<attribute>
<name>pass</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 配置标签属性:sql -->
<attribute>
<name>sql</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>
</taglib>