`
zcwfeng
  • 浏览: 99113 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

自定义jsp标签

 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics