JSP自定义标签
来源:互联网 发布:专业写作软件 编辑:程序博客网 时间:2024/06/08 09:21
在JSP规范的1.1版中增加了自定义标签库规范,自定义标签库是一种非常优秀的表现层组件技术,通过使用自定义标签,可以在简单的标签中封装复杂的功能。
为什么要使用自定义标签库?做开发的我们都知道,在HTML页面中嵌入JSP的脚本,相对于页面来说是非常丑陋的,而对于后期维护起来又是一场灾难,如果有美工人员参与项目开发,而美工人员不熟悉JSP脚本,只熟悉HTML标签,那么对开发的效率则大打折扣了,在HTML页面中插入JSP脚本的坏处:
1、JSP脚本非常丑陋,难以阅读
2、JSP脚本和HTML代码混合,后期维护成本高
3、HTML页面中嵌入JSP脚本,美工人员难以参与开发
从这几点考虑,我们需要一种能在页面中使用的标签,这种标签具有好HTML标签类似的语法,但又可以完成JSP脚本的功能,那么这种标签就是JSP自定义标签
在JSP1.1规范中开发自定义标签比较复杂,JSP2规范简化 标签库的开发,在JSP2中开发标签库的步骤:
1、开发自定义标签处理类
2、建立一个*.tld文件,每个*.tld为念对应yield标签库,每个标签库可以包含多个标签
3、在JSP文件中使用自定义标签
下面我们就跟着步骤来开发一个简单的查询数据的自定义标签
创建自定义标签处理类QueryTag.java,这个类要继承SimpleTagSupport类,重写doTag()方法
package com.tenghu.hibernate.label;import java.io.IOException;import java.io.Writer;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class QueryTag extends SimpleTagSupport{private String driver;private String url;private String username;private String password;private String sql;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 getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSql() {return sql;}public void setSql(String sql) {this.sql = sql;}private Connection conn;private PreparedStatement ps;private ResultSet rs;private ResultSetMetaData rsmd;//重写doTag方法@Overridepublic void doTag() throws JspException, IOException {try {//加载驱动Class.forName(driver);//获取数据库连接conn=DriverManager.getConnection(url, username, password);//获取语句集,并执行sql语句ps=conn.prepareStatement(sql);//获取结果集rs=ps.executeQuery();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>");}out.write("</table>");} catch (ClassNotFoundException e) {e.printStackTrace();throw new JspException("自定义标签错误"+e.getMessage());} catch (SQLException e) {e.printStackTrace();throw new JspException("自定义标签错误"+e.getMessage());}finally{//关闭结果集try{if(rs!=null)rs.close();if(ps!=null)ps.close();if(conn!=null)conn.close();}catch(Exception e){e.printStackTrace();}}super.doTag();}}
建立TLD文件
TLD是Tag Library Derfinition的缩写,即标签库定义,文件的后缀名为tld,每个TLD文件对应一个标签库,一个标签库可以包含多个标签,TLD文件也称为标签库定义文件
标签库定义文件的跟元素是taglib,它可以包含多个tag的子元素,每个子元素都定义一个标签。通常我们可以到Web容器下负责一个标签库文件,并在此基础上修改,如在Tomcat中的webapps\examples\WEB-INF\jsp2路径下包含一个jsp2-example-taglib.tld文件,这就是一个TLD文件的范例,我们只要将这个文件拷贝到自己的Web项目中的WEB-INF下即可
通常我们是在WEB-INF下建一个目录后,才将tld文件放入,这样易于管理
<?xml version="1.0" encoding="UTF-8" ?><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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>taglib</short-name> <!-- 定义标签库的URI --> <uri>http://www.tenghu.com/taglib</uri> <!-- 定义一个标签库 --> <tag> <!-- 定义标签名 --> <name>query</name> <!-- 定义标签处理类 --> <tag-class>com.tenghu.hibernate.label.ConTag</tag-class> <!-- 定义标签体为null --> <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> <!-- 配置标签属性:username --> <attribute> <name>username</name> <required>true</required> <fragment>true</fragment> </attribute> <!-- 配置标签属性:password --> <attribute> <name>password</name> <required>true</required> <fragment>true</fragment> </attribute> <!-- 配置标签属性:sql --> <attribute> <name>sql</name> <required>true</required> <fragment>true</fragment> </attribute> </tag></taglib>
在JSP页面中使用我们自定义标签库需要两点:
1、标签库URI:确定使用那个标签库
2、标签名:确定使用那个标签
使用标签库分为一下步骤:
1、导入标签库:使用taglib编译指令导入标签库,就是标签库和指定前缀关联起来
2、使用标签:在JSP页面中使用自定义标签
taglib语法:
<%@taglib uri="http://www.tenghu.com/taglib" prefix="th" %>
其中的uri属性去顶标签库的URI,这个URI可以确定一个标签库,而prefix属性指定标签库前缀,即所有使用该前缀的标签将由此标签库处理
<th:query password="xiaohu" url="jdbc:mysql://127.0.0.1:3306/company"driver="com.mysql.jdbc.Driver"sql="select * from tab_employee"username="root" />
这样我们的自定义标签就完成了
- JSP----自定义标签---简单标签
- jsp自定义标签-----嵌套标签
- JSP标签编程----自定义标签
- JSP 自定义标签:简单标签
- JSP标签-JSTL-自定义标签
- JSP自定义标签-Select标签
- jsp 自定义标签---标签文件
- JSP自定义标签
- JSP自定义标签学习心得
- JSP自定义标签试验
- JSP 自定义标签库
- 自定义JSP标签
- 创建JSP自定义标签
- 关于自定义标签 jsp
- 关于自定义标签 jsp
- jsp 自定义分页标签
- JSP自定义标签简介
- JSP自定义标签例子
- Encoding 字符串的简单处理 我的开始
- [PHP]进阶教程:PHP中Cookies与Sessions的创建和使用
- Linux之V4L2基础编程
- Core Animation编程指南
- jfreechart 1.0.13中文乱码问题的解决
- JSP自定义标签
- java MD5
- python聊天服务器实现
- 局部加权回归
- 基于TMS320C62X DSP的混合编程研究
- 函数回调的理解
- flex与Java使用blazeds通信
- zoj Unique Ascending Array
- 四大组件注册