1.jsp標簽庫(也稱自定義庫)可看成是一套產生基于xml腳本的方法,它經由javabeans來支持。在概念上說,標簽庫是非常簡單和可以重用的代碼構造。它可以大大簡化你在頁面中輸入各種錄入框的代碼(諸如此類的代碼:<input type="text" name="taxpayername" value = " ,<select name="collectionitemcode" class="required" ...),并使之結構化。
2.標簽庫(tag libraries)提供了建立可重用代碼塊的簡單方式。但是和com和j2ee不同的是,你不需要掌握任何額外的技能就可以建立標簽庫:如果你會編寫jsp頁面,你就會建立標簽庫。最后,標簽庫還改進了web應用程序的維護性。這種對維護性的改進表現在:輕易地在jsp頁面上就實現了基于xml的可定制接口。
3.一個簡單的標簽由下面的元素構成:
⑴ javabeans:為了得到java與生具來的面向對象的好處,可重用的代碼應該放到一個獨立的代碼容器中。這些javabeans并不是標簽庫的一部分。不過它是你的代碼庫用來執行相關任務的基本代碼塊。
?、?標簽處理:這是標簽庫的真正核心。一個標簽處理器將引用它需要的任何資源(你的javabeans)和訪問你的jsp頁面的全部信息(pagecontext對象)。jsp頁面也會將所有已經被設置的標簽屬性和jsp頁面上的標簽體中的內容傳送給標簽處理器。在標簽處理器處理完畢后,它將發回輸出到你的jsp頁面進行處理。
?、?標簽庫的描述(tld文件):這是一個簡單的xml文件,它記錄著標簽處理器的屬性、信息和位置。jsp容器通過這個文件來得知從哪里及如何調用一個標簽庫。
⑷ 網站的web.xml文件:這是你網站的初始化文件,在這個文件中,你定義了網站中用到的自定義標簽,以及哪個tld文件用來描述每個自定義的標簽。
⑸ 分發文件(一個war或者jar文件):如果你想重用自定義標簽的話,你需要一個方法來將它由一個項目轉移到另一個項目中。將標簽庫打包為一個jar文件是一個簡單而且有效的方式。
⑹ 在你的jsp文件中作標簽庫聲明:很簡單,如果要用到該標簽的話,只要在頁面聲明一下就可以,其后,你就可以在該jsp頁面的任何地方使用它。
下面是一個實例
1. 先編寫標簽處理程序,atmtag.java
//用標簽處理程序來定義客戶標簽的工作
import javax.servlet.jsp.*;
//導入標簽類的驅動
import javax.servlet.jsp.tagext.*;
import java.io.*;
import java.sql.*;
import java.math.*;
import java.util.*;
//實現tagsupport或bodytagsupport接口
public class atmtag extends tagsupport
{
connection connect = null;
statement state = null;
resultset result = null;
public atmtag() throws classnotfoundexception
{
class.forname("sun.jdbc.odbc.jdbcodbcdriver");
}
//抽象類tag的方法,標簽處理程序的初始化
public int dostarttag() throws jsptagexception
{
//指導jsp引擎處理標簽的體內容
return eval_body_include;
}
//執行標簽任務
public int doendtag() throws jsptagexception
{
try
{
//把輸出寫到jsp頁面
jspwriter out=pagecontext.getout();
connect=drivermanager.getconnection("jdbc:odbc:test","sa","");
string strquery = " select ccounter_id, caddress,mcashbalance from counter where mcashbalance<=10000; " ;
system.out.println("query: "+strquery);
state = connect.createstatement();
resultset result = state.executequery(strquery);
string sid=null;
string saddress=null;
string sbalance=null;
vector v=new vector();
while(result.next())
{
sid = result.getstring(1);
saddress = result.getstring(2);
sbalance = result.getstring(3);
v.add(sid);
v.add(saddress);
v.add(sbalance);
v.add(";");
}
for(int i=0;i<v.size();i++)
{
string str=(string)v.elementat(i);
pagecontext.getout().write(str);
}
}catch(exception ioe)
{
system.out.println(" error in getting results"+ioe.tostring());
}
//指出對jsp頁面其余部分求值
return eval_page;
}
}
2. 編寫tld文件的代碼:
//xml驗證文檔
<?xml version="1.0" encoding="iso-8859-1"?>
<!doctype taglib public "-//sun microsystems, inc.//dtd jsp tag library 1.1//en"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
//標簽庫版本
<tlibversion>1.0</tlibversion>
//標簽庫依賴的jsp版本
<jspversion>1.1</jspversion>
//標簽庫名
<shortname>atmjsp</shortname>
//關于標簽庫的詳細信息
<info>a tag library</info>
<tag>
//定義標簽的名
<name>atm</name>
//指出標簽處理程序類
<tagclass>atmtag</tagclass>
//此標簽體的定義
<body-content>jsp</body-content>
//關于此標簽與其功能的附加信息
<info>outputs of the atm counter</info>
</tag>
</taglib>
3. 錯誤頁面errorpage.jsp的代碼:
<html>
<body>
<%@ page iserrorpage="true" %>
<%=exception.getmessage() %>
</body>
</html>
4. 編寫jsp文件:atm.jsp
<%@ page import="atmtag" %>
<%@ taglib uri="atmjsp.tld" prefix="atmjsp" %>
<%@ page errorpage="errorpage.jsp" %>
<!doctype html public "-//w3c//dtd html 4.0 translational//en ">
<html>
<h3 align=center>atm counters that needs cash</h3>
<table>
<tr><td></td><td><atmjsp:atm/></td></tr>
</table>
</html>
新聞熱點
疑難解答