JSP的自定义标签(二)之带属性的标签

1. 创建标签的类

下面我们创建一个QueryTag.java的标签类,这个类就是含有属性,所有的属性都应该用getter和setter的方法。这个标签的作用是通过标签来直接连接数据库,当然连接数据库是需要driver、url、user、pass的,所以将其写在tld的标签库中,同时还需要sql语言来访问数据库,所以还需要sql的属性。

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();
			}
		}
	}
}

2. 定义标签库

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

3. 使用标签

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!-- 导入标签库,指定mytag前缀的标签,
	由http:// www.linjw.taglib/mytaglib的标签库处理 -->
<%@ taglib uri="http:// www.linjw.taglib/mytaglib" prefix="mytag"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>自定义标签示范</title>
	<meta name="website" content="http:// www.linjw.taglib" />
</head>
<body bgcolor="#ffffc0">
<h2>下面显示的是查询标签的结果</h2>
<!-- 使用标签 ,其中mytag是标签前缀,根据taglib的编译指令,
	mytag前缀将由http://www.linjw.taglib/mytaglib的标签库处理 -->
<mytag:query
	driver="com.mysql.jdbc.Driver"
	url="jdbc:mysql://localhost:3306/javaee"
	user="root"
	pass="root"
	sql="select * from news_inf"/><br/>
</body>
</html>




你可能感兴趣的:(java,jsp,Web应用)