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:querydriver="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/javaee"user="root"pass="root"sql="select * from news_inf"/><br/>
</body>
</html>

JSP的自定义标签(二)之带属性的标签相关推荐

  1. JSP自定义带属性的标签

    前面我们已近介绍过如何自定义单标签,如何自定义双标签,但标签在通常情况下,是可以带属性的,下面介绍如何定义带属性的单标签 我们自定义一个calculation,这个标签有三个属性,分别是flag,sy ...

  2. 【a标签的使用和属性】

    [a标签的使用和属性] a标签的使用和属性 a标签的使用 属性(属性值) 1.href(需要跳转到哪个页面)(存放跳转的地址url) 2.target(打开目标的形式)(定义在何处打开链接) targ ...

  3. 使用决策树(decision-tree)预测隐形眼镜类型(标签二值化(LabelBinarizer)复原输出)

    数据集 提取码:j50c 数据长这样: 完整代码: from sklearn.tree import DecisionTreeClassifier,export_graphviz from sklea ...

  4. JAVAWEB开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)

    JSTL  JSTL简介: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用:   提供给Java Web开发人员一个标准通用的标签函数库   和EL ...

  5. JSP自定义标签_通过属性控制标签体的执行次数

    什么也不说,直接上代码: import java.io.IOException;import javax.servlet.jsp.JspException; import javax.servlet. ...

  6. jsp中用自定义标签实现简单的分页

    昨天学了一天的自定义标签,大概了解了其原理,就写了一个实现简单分页的程序. 1.它是基于我自己写的分页类(Pager)的,其代码如下: package com.neusoft.training.dat ...

  7. 自定义标签(JspFragment类、invoke方法、开发带属性的标签)

    自定义标签(JspFragment类.invoke方法.开发带属性的标签) 一.JspFragment类 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定 ...

  8. java 自定义标签实现的_Java实现自定义标签的步骤——带你实现自己的标签

    一.自定义标签: 使用标签的好处:使用方便.简洁.实现代码重用 二.自定义标签的形式: 1.标签属性: 2.标签体 (1)无标签体――空标签 (2)有标签体 · 普通文本 · 脚本片断 · 脚本表达式 ...

  9. jsp tag 自定义标签实现按钮的显示

    前些天在一个项目中做了一个最基本的权限管理(标准的权限结构,用户-角色-菜单),后来需要精确地控制到按钮就想到了使用自定义标签(jsp tag)来处理按钮的显示与隐藏. 下面是我参考网上的资料自己写的 ...

  10. 自定义标签之 带Body的标签库

    在自定义标签之HelloWorld中用Tag和TagSupport实现了简单的HelloWorld,那么这篇记录带Body的标签开发,带有Body的Tag必须要实现javax.servlet.jsp. ...

最新文章

  1. PHP通过DOM操作XML
  2. Android中自定义控件
  3. boost::mp11::mp_copy_if相关用法的测试程序
  4. 3des加密 java php_php 3DES加密如何兼容Java
  5. 《Head First设计模式》第九章(1)迭代器模式
  6. 精读《V8 引擎 Lazy Parsing》
  7. 股票期货数据的resample处理
  8. 【算法】图的基本介绍 以及 存储方式
  9. 实战:手把手教你开发React应用-郭永峰-专题视频课程
  10. Visual Studio2012下载及安装
  11. 微信支付宝小程序复制内容到剪贴板功能
  12. 2021-05-14
  13. 自动驾驶工程师的进阶之路
  14. 用学校邮箱使用微软OneDrive云存储空间5120G
  15. 对序列化器、“对象”的理解
  16. 计算机网络:运输层(流量控制,拥塞控制,连接管理)
  17. 一文轻松掌握python语言命名规则(规范)
  18. 我最爱用的一款 Redis 可视化管理工具——Another Redis Desktop Manager
  19. CKeditor5自定配置字体大小
  20. 2020-11-04 prototype

热门文章

  1. Codeforces 374A - Inna and Pink Pony
  2. CSS flex 布局 一些基本属性应用
  3. redis的操作笔记
  4. Sqlite程序及库文件——整理(懒人)
  5. Scapy 函数传值问题,解决多层数据获取
  6. HCIP-RS-GRE
  7. Java为什么要有堆外内存_作为 Java 开发者,你需要了解的堆外内存知识
  8. NP、OSPF链路状态数据库
  9. 通俗版 TCP/UDP三次握手 四次握手
  10. 51nod 1135 原根(原根)