将此tld命名为mytaglib.tld,放在webroot/WEB-INF下面
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<!-- 自定义一 -->
<tlib-version>1.0</tlib-version>
<short-name>mytaglib</short-name>
<uri>http://www.tyf.com/mytaglib</uri>
<tag>
<name>helloWord</name>
<tag-class>zcw.HelloWordTag</tag-class>
<body-content>empty</body-content>
</tag>
<!-- 自定义二 -->
<tag>
<name>query</name>
<tag-class>zcw.QueryTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>driver</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<attribute>
<name>url</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<attribute>
<name>user</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<attribute>
<name>pass</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<attribute>
<name>sql</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>
<!-- 自定义三 -->
<tag>
<name>iter</name>
<tag-class>zcw.IteratorTag</tag-class>
<body-content>scriptless</body-content>
<!-- 配置属性collection -->
<attribute>
<name>collection</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<!-- 配置属性item -->
<attribute>
<name>item</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>
</taglib>
第一个
对应的第一个类,要继承SimpleTagSupport
package zcw;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class HelloWordTag extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
this.getJspContext().getOut().write("hello world");
}
}
对应的jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib uri="http://www.tyf.com/mytaglib" prefix="mytag"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'configTest.jsp' starting page</title>
</head>
<body>
<h1>自定义标签内容</h1>
<mytag:helloWord/><br/>
</body>
</html>
第二个自定义迭代标签
package zcw;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class IteratorTag extends SimpleTagSupport {
//用于指定需要迭代的集合
private String collection ;
//标签属性,指定迭代集合元素,为集合指定名称
private String item;
public String getCollection() {
return collection;
}
public void setCollection(String collection) {
this.collection = collection;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
@Override
public void doTag() throws JspException, IOException {
Collection<?> itemList = (Collection<?>)getJspContext().getAttribute(collection);
for(Object s:itemList){
this.getJspContext().setAttribute(item, s);
this.getJspBody().invoke(null);
}
super.doTag();
}
}
对应jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib uri="http://www.tyf.com/mytaglib" prefix="mytag"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'configTest.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h2>带标签体的标签-迭代器标签</h2>
<hr/>
<%
//创建一个list
List<String> a = new ArrayList<String>();
a.add("hello");
a.add("world");
a.add("java");
pageContext.setAttribute("a",a);
%>
<table border="1" bgcolor="9999cc" width="300">
<mytag:iter item="item" collection="a">
<tr>
<td>${pageScope.item}</td>
</tr>
</mytag:iter>
</table>
</body>
</html>
第三个自定义query标签
package zcw;
import java.io.IOException;
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.tagext.SimpleTagSupport;
public class QueryTag extends SimpleTagSupport {
//标签属性
private String driver;
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;
}
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 void doTag() throws JspException, IOException {
try{
Class.forName(driver);
conn = DriverManager.getConnection(url,user,pass);
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("</tr>");
}
}
out.write("</table>");
}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 e) {
e.printStackTrace();
}
}
}
}
对应jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="mytag" uri="http://www.tyf.com/mytaglib"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'db.jsp' starting page</title>
</head>
<body>
<mytag:query
user="root"
url="jdbc:mysql://localhost:3306/demo"
pass="root"
driver="com.mysql.jdbc.Driver"
sql="select * from user"/>
</body>
</html>
分享到:
相关推荐
自定义JSP标签是Java服务器页面(JSP)技术中的一种高级特性,它允许开发者创建自己的可重用组件,以增强网页的可维护性和代码复用性。在JSP中,自定义标签与HTML标签类似,但它们可以执行更复杂的业务逻辑,提供了...
想要在 JavaServer Pages (JSP) 应用程序中添加自定义标签吗?本教程将为您展示如何用这些标签编写类似于 JSP 技术自带操作 —— 如 jsp:useBean、jsp:getProperty 和 jsp:forward —— 的自定义操作。介绍如何用...
本文将深入探讨如何掌握自定义JSP标签,以及其在实际开发中的应用。 一、JSP自定义标签概述 1. JSP自定义标签的作用:自定义标签提供了一种封装业务逻辑和视图的方式,使得代码结构更加清晰,降低了HTML和Java代码...
下面我们将深入探讨如何开发自定义JSP标签。 首先,我们需要理解自定义JSP标签的基本结构。自定义标签通常由三部分组成:标签库描述符文件(TLD),标签处理类(Tag Handler Class)以及标签库使用者在JSP页面中...
下面我们将深入探讨自定义JSP标签的原理、创建过程及其应用。 一、JSP标签基础知识 JSP标签分为两种类型:标准动作标签(Standard Actions)和自定义标签(Custom Tags)。标准动作标签如`<jsp:include>`、`<jsp:...
而自定义JSP标签则是JSP的一个强大特性,它允许开发者创建自己的标签库,以更加直观、易于理解的方式组织代码,提升开发效率。本篇将深入探讨如何掌握自定义JSP标签,并解释其在网络编程中的重要性。 首先,了解JSP...
为了提高代码复用性和可维护性,开发者通常会使用自定义JSP标签。本篇将深入探讨如何掌握自定义JSP标签,让你能够高效地利用这一功能。 一、自定义JSP标签的背景与意义 在传统的JSP页面中,我们常常使用内置标签如`...
然而,有时预定义的标签并不能满足我们所有的需求,这时就需要自定义JSP标签来扩展功能。本教程将深入讲解如何创建和使用自定义JSP标签,以实现更加灵活的HTML渲染和业务逻辑处理。 1. 自定义标签的概念: 自定义...
本文将深入探讨自定义JSP标签的创建与使用,以及它如何实现无刷新功能。 首先,理解JSP自定义标签的概念。自定义标签是开发者根据需求创建的,可以看作是预定义的HTML元素,它们扩展了JSP的功能,提供了更加灵活的...
自定义JSP标签是JSP开发中的一种重要技术,它允许开发者创建可重用的、模块化的代码片段,提升代码的可读性和可维护性。本文将深入探讨自定义JSP标签的相关概念、格式、处理过程以及创建和使用自定义标签库的步骤。 ...
spring-webmvc-3.0.5.RELEASE.jar jsp-api-2.1.jar 教程:http://blog.csdn.net/yjqyyjw/article/details/51840751