亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP標簽庫介紹

2024-09-05 00:19:26
字體:
來源:轉載
供稿:網友

jsp標簽庫介紹

    我用jsp和asp編程已經有一段頗長的時間了,在這兩種服務器端的編程解決方案中,我越來越覺得jsp的功能要比asp強大得多。我為什么要把jsp選作首選服務器端web應用程序開發工具呢?當然,jsp迷人的特性和功能不少,但jsp的標簽庫是讓我做出這一決定的最重要誘因之一。
       為什么這樣說呢?原因有兩個方面:維護和開發的速度。服務器端腳本語言其實就像是開發internet的熔爐。在一個服務器頁面上,你可以很方便地混合各種不同的腳本方法和對象。這種頁面簡直就是建筑web的混凝土。正是這種“材料”的混合給予了服務器端腳本強大的信息處理能力。它可以讓服務器端程序設計人員開發出動態的、靈活的web頁面。但是,另一方面,腳本的自由混合也有其缺點,那就是維護起來非常麻煩,特別是隨著項目規模的不斷增長而顯得尤其嚴重。更糟糕的是,隨著代碼的復雜性增加,開發的速度就會變慢,不利于開發中等和大型的web應用,許多中等規?;蛘叽笮偷姆掌鞫藈eb應用程序很晚才得以推出而且成本也無法控制。此外,一旦開發完,站點還要找合格的編程者來維護這些頗為復雜的代碼,結果讓這些程序員成為了一般的web設計人員,服務器端應用程序在最終的圖形設計和實現這兩方面上就弱化了。
為了克服這個問題,asp引進了com對象技術,而jsp則提供了j2ee作為對策。這些解決方案都是建立在集中的、可重用代碼庫的機制之上。但是,他們使用起來可就太難了,學習所耗費的時間也很多。還有,這些解決方案并沒有減少建立混亂代碼的誘惑,結果,我們只能組織起大型的、內部結構良好的開發團隊來使用這些技術。對于中等的項目來說,通常都較少使用這樣的方法,但事實上,中等的web應用項目才是最多的。因此,許多項目都不得不使用一個不符合它們需要的開發和維護環境。
幸好,jsp提供了一個解決這一問題的更好的辦法。標簽庫(tag libraries)提供了一個建立可重用代碼塊的簡單方式。一旦標簽庫設計好,它就可以在許多項目中再次使用。更方便的是,與com和j2ee不同,只要你懂得寫jsp,你無需學習任何其它的技巧就可以建立一個標簽庫!最后,標簽庫還改進了web應用程序的維護性。這種對維護性的改進表現在:輕易地在jsp頁面上就實現了基于xml的可定制接口。結果可想而知,web設計人員可以建立jsp web應用程序而無需知道jsp是怎么回事。這樣一來,就成為一項非常富有效率的團隊開發任務了。jsp程序員可以建立定制的標簽和后端代碼模塊,而web設計人員則可以使用定制標簽并且全力關注于web設計本身。標簽庫解決了代碼混亂的問題,而且做得干凈漂亮(事實上,xml才是解決這些問題的本質所在,但是標簽庫還是起到了相當關鍵的作用)。

什么是標簽庫?
jsp標簽庫(也稱自定義標簽庫)可看成是一種通過javabean生成基于xml的腳本的方法。從概念上講,標簽就是很簡單而且可重用的代碼結構。比方說,在我們最新發布的jspkit(在jsp insider內)中,使用xml標簽實現了對xml文檔的輕松訪問。請看以下的清單a。
清單a:執行xml/xsl 轉換的示例標簽及其所在的html頁面
<%@ taglib uri="http://www.jspinsider.com/jspkit/jaxp" prefix="jaxp"%>
<jaxp:transformertag>
<jaxp:xmlfile>c:/xml/example.xml</jaxp:xmlfile>
<jaxp:xslfile>c:/xml/example.xsl</jaxp:xslfile>
</jaxp:transformertag>

   以上的示例使用了簡單的標簽來訪問處在幕后的更強大代碼,標簽部分的語句首先裝載了一個xml文件,然后應用了一個xsl文件來將xml文件中的內容轉換成某個表現格式,并發送給客戶端,這一切僅僅只是用了一個很簡單的標簽。定制標簽使得jsp項目中很容易創建重用的開放源代碼模塊,而你所需要的只是標簽庫和它的文檔說明。

標簽庫的重要特性

1.易于安裝在多個項目上
標簽很容易從一個jsp項目遷移到其他項目。一旦建立了一個標簽庫,則只需要將所有的東西打包為一個jar文件,你就可以在任何的jsp項目中重新使用。因為標簽可以重新使用,標簽庫可以輕松地用于你自己的項目,所以標簽庫越來越通行。目前,最好的標簽資源可以在jsptags.com這個站點找到。
 

2.擴展jsp      標簽庫可以具備jsp規范(jsp 1.2)中的任何特性和功能,你可以無限制地擴展和增加jsp的功能,而無需要等待下一版本jsp的出現。例如,你對jsp的include調用不太滿意。你可以建立自己的include標簽,該標簽執行的是你自己的規范。
 

3.容易維護

標簽庫使得jsp的web應用程序非常易于維護,原因有:
(1)標簽應用簡單,對任何人而言都很容易使用、易于理解。
(2)所有的程序邏輯代碼都集中放在的標簽處理器和javabeans中。這意味著你在升級代碼時,無需要對每個使用該代碼的頁面進行修改,你只需要修改集中的代碼文件便可。
(3)如果需要加入新的功能,你也無需修改任何已經存在的頁面,可以在標簽中加入額外的屬性,從而引進新的行為,而其它舊的屬性不變,這樣所有舊的頁面還可以正常工作。 例如你有一個讓所有文本變藍的標簽:
<bluetext>my text</bluetext>
但在后來項目中,你又想讓藍色變暗。你可以保留原有的標簽,只要為其增加一個新的屬性:shade ,如下所示:
<bluetext shade="teal">my text</bluetext>
所有舊的標簽仍然可以產生藍色的文本,但現在你可以使用同一標簽來產生變暗的藍色文本了。
(4)標簽提升了代碼的重用性。那些經過多次測試和使用的代碼肯定具有更少的bug。所以,使用定制標簽的jsp頁面也同樣具有更少的缺陷,維護起來自然方便多了。

4.快速的開發時間
標簽庫提供一個簡單的方式來重用代碼。在服務器端的語言中,其中一個標準的重用代碼方式是使用模板。相對于使用模板庫,標簽庫是一個更好的解決辦法。使用模板庫,你必須為每個項目修改模板或者且建立嚴格的界面,而標簽庫則沒有這些限制,并且擁有所有面向對象的好處,可以做到靈活和更有擴展性,而且,通過重用代碼,你可以花費更少的時間來做開發,更多的時間可以用在設計你的web應用上。標簽庫的接口也很簡單,非常容易做插入、使用和調試。

標簽的組成結構

雖然標簽庫非常易于使用,不過要建立一個標簽庫的內部實現機制還是頗復雜的,起碼要比建立一個簡單的javabean復雜。這個復雜是來自于標簽庫是由幾部分構成的。不過,你只需要掌握了java和jsp的知識就夠了。
一個簡單的標簽由下面的元素構成:
1.javabean:為了得到java與生具來的面向對象的好處,可重用的代碼應該放到一個獨立的代碼容器中,也就是javabean。這些javabeans并不是標簽庫必不可少的一部分,但它們是標簽庫用來執行所分配任務的基礎代碼模塊。
2.標簽處理器:標簽處理器是標簽庫的真正核心。一個標簽處理器(tag handler)引用它所需要的任何外部資源(javabean)并且負責訪問jsp頁面的信息(pagecontext對象)。而jsp頁面則把頁面上設置的標簽屬性和標簽體中的內容都傳遞給標簽處理器,當標簽處理器完成其處理過程后,它就會把處理后的輸出結果回送給jsp頁面做進一步處理。
3.標簽庫描述符(tld文件):這是一個簡單的xml文件,它記錄著標簽處理器的屬性、信息和位置等信息。jsp容器通過這個文件來得知從哪里及如何調用一個標簽庫。
4.web站點的web.xml文件:這是web站點的初始化文件,在這個文件中,需要定義了web站點中用到的自定義標簽,以及用來描述每個自定義標簽的tld文件。
5.發布文件(war或jar文件):如果你想重用自定義標簽的話,你需要一個方法來將它由一個項目遷移到其他項目中去。將標簽庫打包為一個jar文件是一個簡單而且有效的方式。
6.jsp頁面上的標簽庫聲明:要在jsp頁面中的使用某個自定義標簽的話,需要使用標簽庫標示符在頁面上進行聲明。
 

看來要做的工作很多,剛開始用的時候當然會有點棘手,不過其實并不是很難。它的要點并不在于編碼,而是在于如何將各部分正確地組織起來。這種層次性的結構是很重要的,它令標簽的使用靈活和更容易轉移。更重要的事,這些層次可以讓整個建立標簽庫的過程都能通過jsp ide(jsp的集成開發環境)自動完成。jsp ide更可以自動完成創建定制標簽的大部分工作,而你自己則只需要負責建立代碼和標簽處理器。

(注意:一個標簽處理器僅定義一個自定義標簽;一個標簽庫是幾個處理相同任務的標簽處理器的集合)

建立你的第一個標簽

以下將一步一步地教你如何建立自定義的標簽,具體的例子是擴展jsp,令它擁有自己的html編碼功能。這個功能將所有的<和>字符用html代碼來代替。它可以很容易地擴展為做其它的編碼處理。為了簡化,這個例子只解釋了建立自定義標簽的基本要素。

創建javabean

代碼中的任何可重用部分都應該放到一個javabean中。這一點是很重要的。這樣你就可以在其他項目中重用這些代碼了。由于任何放置在標簽處理器內的代碼在標簽外都是不可以重用的,因此將可重用的代碼部分獨立開來是很重要的。在這個例子總,為html編碼的邏輯是常用的,因此放到javabean中,請參看清單b
清單b:html編碼javabean
/* html_format.java */
public class html_format extends object implements java.io.serializable {

/** 創建新的html_format */
public html_format() {}

/** 將一個字符串中所有的所有 < 和 > 字符用響應的html編碼代替 */
public string html_encode(string as_data)
{
int li_len = as_data.length();

/*string buffer的長度要比原來的字符串長*/
stringbuffer lsb_encode = new stringbuffer(li_len + (li_len/10));

/* 循環替換全部的< 和 > 字符 */
for( int li_count = 0 ; li_count < li_len ; li_count++)
{ string ls_next = string.valueof(as_data.charat(li_count));
if (ls_next.equals("<")) ls_next = "<";
if (ls_next.equals(">")) ls_next = ">";
lsb_encode.append( ls_next );
}

return( lsb_encode.tostring() );
}
}


創建標簽處理器
標簽處理器的代碼請參看清單c:
清單c:html編碼標簽處理器
import java.io.ioexception;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class html_formattag extends bodytagsupport
{
/* 1) 在標簽末將會調用這個函數 */
public int doendtag() throws jsptagexception
{
try
{ /* 2)得到標簽中的文本 */
bodycontent l_tagbody = getbodycontent();
string ls_output = "";

/* 3)如果標簽體有文本,就處理它 */
if(l_tagbody != null)
{ html_format l_format = new html_format();
/* 3a) 將標簽體的內容轉換為一個字符串 */
string ls_html_text = l_tagbody.getstring();
ls_output = l_format.html_encode(ls_html_text);
}
/* 4)將結果寫回到數據流中 */
pagecontext.getout().write(ls_output.trim());
}
catch (ioexception e)
{ throw new jsptagexception("tag error:" + e.tostring());
}

/* 讓jsp繼續處理以下頁面的內容 */
return eval_page;
}
}

這個處理很簡單,它包括有:
1.讀入位于開始和結束標簽間的文本
2.調用html編碼函數
3.將結果返回到jsp頁面。

創建標簽描述符

我們需要描述自定義標簽以讓系統知道如何處理。該描述文件的后綴為.tld,tld文件通常就以標簽處理器命名,并存放在“/web-inf/”目錄之下。請參看清單d。
清單d:html編碼標簽描述器
<?xml version="1.0" encoding="utf-8" ?>

<!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>
<jspversion>1.1</jspversion>
<shortname>html_formattag</shortname>
<uri></uri>
<info>html encoding tag </info>

<tag>
<name>htmlencode</name>
<tagclass>html_formattag</tagclass>
<info>encode html</info>
</tag>

</taglib>

更新web xml文件

現在可以告訴jsp容器如何使用標簽庫了。為此要修改web.xml文件,具體說來是要在其中加入一個taglib的項目來注冊該標簽庫,并為標簽分配一個uri。uri是web站點上唯一應用于這一特定標簽的索引。由于標簽今后還可能用在不同的web站點上,所以你最好采用完整的url和/或者包名字(package name)來保證這一唯一性。這個例子是簡化了,示例代碼請參看清單e。
清單e:修改web.xml文件
<?xml version="1.0" encoding="iso-8859-1"?>

<!doctype web-app
public "-//sun microsystems, inc.//dtd web application 2.2//en"
"http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

<web-app>

<taglib>
<taglib-uri>
htmlencode
</taglib-uri>
<taglib-location>
/web-inf/html_formattag.tld
</taglib-location>
</taglib>

</web-app>

使用新的標簽

自定義的標簽設置好后,就可以用在你的jsp頁面上了。要做到這一點,只需要在頁面上使用taglib指示命令聲明所要采用的標簽即可。標簽通過其唯一的uri被索引,然后被分配給一個名字空間前綴(prefix)。這一前綴并沒有什么特別的意義,只要它不與其它的名字空間沖突便可,可以任意。請參看以下的清單f和g。

清單f:在一個jsp頁面上使用html編碼標簽

<%@ taglib uri="htmlencode" prefix="examples" %>
<pre>
<?xml:namespace prefix = examples /><examples:htmlencode>
< hello , simple sample >
</examples:htmlencode>
</pre>

清單g:范例代碼的輸出
< hello , simple sample >
which displays as:
< hello , simple sample >

通過這個標簽,我就將該頁面的所有代碼編碼了。所有的自定義標簽都是在服務器上處理的。這意味著你將不會在輸出的頁面上看到自定義的標簽。

正如你所看到的那樣,建立標簽并非難事。最麻煩的是學習標簽處理器的整個細節。這是一個很強大的功能,我們不過是觸及了皮毛。由于這一過程需要采取的步驟很多,所以剛入門的jsp程序員可能在建立標簽的時候會覺得很困惑。


結論

標簽庫是jsp最重要的特性之一,它還處在不斷的發展中。它的確是一個新事物,因此還沒有被廣泛采用,不過自定義標簽庫已經剝去了它的神秘面紗,越來越多的開發者也開始關注和使用它了。在2001年末,可預料標簽庫將是許多jsp項目中的一個很常見的特性。

在這篇文章中只簡要地討論了標簽庫的好處。標簽庫實際上還有許多其它強大的功能。 標簽庫促使jsp開發進入了前所未有的新天地。對jsp開發人員來說這確實是一種很令人振奮的新技術,因為他們得到了一個可將jsp轉到各個應用并且建立任何類型web應用的工具。標簽庫讓jsp變成了最豐富、最具動態開發能力的、強大的web編程環境。它的功能只受我們的想象和創造力限制。


 

最大的網站源碼資源下載站,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久伊人精品一区二区三区| 日韩成人中文电影| 日韩成人在线观看| 精品国偷自产在线视频99| 午夜精品福利视频| 成人精品一区二区三区| 国产精品视频网站| 欧美性猛交xxxx富婆弯腰| 正在播放欧美一区| 亚洲嫩模很污视频| 国产成人精品一区二区三区| 一级做a爰片久久毛片美女图片| 亚洲高清色综合| 国产成人一区二区三区| 国产一区二区美女视频| 国产成人精品av在线| 在线亚洲国产精品网| 日韩中文字幕网| 欧美精品在线极品| 国产不卡精品视男人的天堂| 欧美成人午夜激情在线| 91性高湖久久久久久久久_久久99| 欧美在线免费观看| 欧美日韩福利视频| 538国产精品视频一区二区| 亚洲成人精品久久| 国产精品扒开腿爽爽爽视频| 国产91对白在线播放| 不卡在线观看电视剧完整版| 久久久免费高清电视剧观看| 亚洲aⅴ男人的天堂在线观看| 亚洲图片欧美日产| 日韩av在线资源| 亚洲va久久久噜噜噜| 久久天天躁狠狠躁夜夜躁2014| 在线成人激情视频| 福利一区福利二区微拍刺激| 亚洲成人久久一区| 国产精品美女999| 亚洲欧美另类国产| 色综合男人天堂| 国产日韩在线亚洲字幕中文| 亚洲综合精品一区二区| 久久久久免费视频| 亚洲美女免费精品视频在线观看| 日本精品免费观看| 日本午夜人人精品| 亚洲无av在线中文字幕| 国产精品视频午夜| 亚洲国产成人爱av在线播放| 国产99视频精品免视看7| 国产精品久久久精品| 亚洲一区精品电影| 国产精品pans私拍| 国产91免费观看| 亚洲女人被黑人巨大进入| 成人深夜直播免费观看| 91精品一区二区| 在线看欧美日韩| 欧美插天视频在线播放| 国产精品视频区1| 欧美日韩激情小视频| 国产精品久久久久久久久久三级| 亚洲aaa激情| 成人免费xxxxx在线观看| 91久久久国产精品| 国产九九精品视频| 久久91精品国产| 精品一区二区三区四区| 欧美高清在线观看| 日韩高清av一区二区三区| 欧美日韩999| 亚洲精品福利免费在线观看| 国产成人一区二区在线| 国产精品国产三级国产aⅴ浪潮| 欧美性生交xxxxx久久久| 日韩精品亚洲视频| 最好看的2019的中文字幕视频| 亚洲国产毛片完整版| 91在线无精精品一区二区| 日韩精品在线电影| 狠狠躁夜夜躁人人躁婷婷91| 日韩精品中文字幕视频在线| 亚洲无限乱码一二三四麻| 国产精品福利网站| 在线视频日本亚洲性| 中文字幕日韩电影| 日韩极品精品视频免费观看| 亚洲v日韩v综合v精品v| 欧美电影免费看| 精品视频在线观看日韩| 亚洲人成网7777777国产| 亚洲一级黄色av| 日本伊人精品一区二区三区介绍| 亚洲xxx视频| 91亚洲精品久久久久久久久久久久| 97精品久久久中文字幕免费| 久久综合久久美利坚合众国| 国产精品444| 欧美激情在线观看| 黄色成人在线免费| 欧美黄色性视频| 午夜伦理精品一区| 麻豆一区二区在线观看| 国产女精品视频网站免费| 国产日韩av在线| 国产精品久久久久久久美男| 日韩高清欧美高清| 日韩国产欧美精品一区二区三区| 国产精品视频免费观看www| 性色av一区二区三区免费| 欧美成人精品在线视频| 国产精品久久久久久久久粉嫩av| 中文字幕av一区| 亚洲男人的天堂网站| 不卡毛片在线看| 国产91精品青草社区| 国产剧情久久久久久| 美女撒尿一区二区三区| 97超级碰在线看视频免费在线看| xxx欧美精品| 欧美乱妇高清无乱码| 欧美日韩激情小视频| 奇米成人av国产一区二区三区| 欧美成人免费全部| 亚洲国产又黄又爽女人高潮的| 精品在线欧美视频| 亚洲国产欧美一区二区三区同亚洲| 亚洲人线精品午夜| 久久91超碰青草是什么| 日韩av在线网址| 国产精品福利小视频| 日韩精品视频免费在线观看| 91久久久久久| 日韩中文在线中文网三级| 狠狠色狠狠色综合日日小说| 在线精品高清中文字幕| 亚洲va国产va天堂va久久| 成人福利免费观看| 91chinesevideo永久地址| 国产人妖伪娘一区91| 欧美网站在线观看| 国产精品高潮呻吟久久av黑人| 精品成人乱色一区二区| 2019中文字幕免费视频| 国产成人精品久久二区二区91| 91免费的视频在线播放| 久久国产天堂福利天堂| 欧美另类精品xxxx孕妇| 亚洲福利视频在线| 91精品国产91久久久久福利| 亚洲一区二区福利| 日韩av影视在线| 久久久www成人免费精品| 一区二区三区视频免费在线观看| 俺去啦;欧美日韩| 亚洲夜晚福利在线观看| 91天堂在线观看| 伊人一区二区三区久久精品| 国产精品www色诱视频| 国产伦精品一区二区三区精品视频| 国产精品丝袜久久久久久不卡| 亚洲国产精品字幕| 97国产真实伦对白精彩视频8|