电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JSP標簽庫介紹

瀏覽:45日期:2024-07-04 16:04:19

我用JSP和ASP編程已經有一段頗長的時間了,在這兩種服務器端的編程解決方案中,我越來越覺得JSP的功能要比ASP強大得多。我為什么要把JSP選作首選服務器端web應用程序開發(fā)工具呢?當然,JSP迷人的特性和功能不少,但JSP的標簽庫是讓我做出這一決定的最重要誘因之一。;

為什么這樣說呢?原因有兩個方面:維護和開發(fā)的速度。服務器端腳本語言其實就像是開發(fā)Internet的熔爐。在一個服務器頁面上,你可以很方便地混合各種不同的腳本方法和對象。這種頁面簡直就是建筑Web的混凝土。正是這種“材料的混合給予了服務器端腳本強大的信息處理能力。它可以讓服務器端程序設計人員開發(fā)出動態(tài)的、靈活的Web頁面。但是,另一方面,腳本的自由混合也有其缺點,那就是維護起來非常麻煩,特別是隨著項目規(guī)模的不斷增長而顯得尤其嚴重。更糟糕的是,隨著代碼的復雜性增加,開發(fā)的速度就會變慢,不利于開發(fā)中等和大型的web應用,許多中等規(guī)模或者大型的服務器端Web應用程序很晚才得以推出而且成本也無法控制。此外,一旦開發(fā)完,站點還要找合格的編程者來維護這些頗為復雜的代碼,結果讓這些程序員成為了一般的Web設計人員,服務器端應用程序在最終的圖形設計和實現(xiàn)這兩方面上就弱化了。

為了克服這個問題,ASP引進了COM對象技術,而JSP則提供了J2EE作為對策。這些解決方案都是建立在集中的、可重用代碼庫的機制之上。但是,他們使用起來可就太難了,學習所耗費的時間也很多。還有,這些解決方案并沒有減少建立混亂代碼的誘惑,結果,我們只能組織起大型的、內部結構良好的開發(fā)團隊來使用這些技術。對于中等的項目來說,通常都較少使用這樣的方法,但事實上,中等的web應用項目才是最多的。因此,許多項目都不得不使用一個不符合它們需要的開發(fā)和維護環(huán)境。

幸好,JSP提供了一個解決這一問題的更好的辦法。標簽庫(Tag libraries)提供了一個建立可重用代碼塊的簡單方式。一旦標簽庫設計好,它就可以在許多項目中再次使用。更方便的是,與COM和J2EE不同,只要你懂得寫JSP,你無需學習任何其它的技巧就可以建立一個標簽庫!最后,標簽庫還改進了Web應用程序的維護性。這種對維護性的改進表現(xiàn)在:輕易地在 JSP頁面上就實現(xiàn)了基于XML的可定制接口。結果可想而知,Web設計人員可以建立JSP Web應用程序而無需知道JSP是怎么回事。這樣一來,Web開發(fā)就成為一項非常富有效率的團隊開發(fā)任務了。JSP程序員可以建立定制的標簽和后端代碼模塊,而Web設計人員則可以使用定制標簽并且全力關注于Web設計本身。標簽庫解決了代碼混亂的問題,而且做得干凈漂亮(事實上,XML才是解決這些問題的本質所在,但是標簽庫還是起到了相當關鍵的作用)。

什么是標簽庫?

JSP標簽庫(也稱自定義標簽庫)可看成是一種通過JavaBean生成基于XML的腳本的方法。從概念上講,標簽就是很簡單而且可重用的代碼結構。比方說,在我們最新發(fā)布的JSPKit(在JSP Insider內)中,使用XML標簽實現(xiàn)了對XML文檔的輕松訪問。請看以下的清單A。

清單A:執(zhí)行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文件中的內容轉換成某個表現(xiàn)格式,并發(fā)送給客戶端,這一切僅僅只是用了一個很簡單的標簽。定制標簽使得JSP項目中很容易創(chuàng)建重用的開放源代碼模塊,而你所需要的只是標簽庫和它的文檔說明。

標簽庫的重要特性

1.易于安裝在多個項目上

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

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

3.容易維護

標簽庫使得JSP的web應用程序非常易于維護,原因有:

(1)標簽應用簡單,對任何人而言都很容易使用、易于理解。

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

4.快速的開發(fā)時間

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

標簽的組成結構

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

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

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

建立你的第一個標簽

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

創(chuàng)建JavaBean

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

/** 創(chuàng)建新的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));

/* 循環(huán)替換全部的< 和 > 字符 */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() );}}

創(chuàng)建標簽處理器標簽處理器的代碼請參看清單C:清單C:HTML編碼標簽處理器 import java.io.IOException;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;

public class HTML_FormatTag extends BodyTagSupport{/* 1) 在標簽末將會調用這個函數(shù) */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)將結果寫回到數(shù)據(jù)流中 */pageContext.getOut().write(ls_output.trim());}catch (IOException e){ throw new JspTagException("Tag Error:" + e.toString());}

/* 讓JSP繼續(xù)處理以下頁面的內容 */return EVAL_PAGE;}}

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

創(chuàng)建標簽描述符

我們需要描述自定義標簽以讓系統(tǒng)知道如何處理。該描述文件的后綴為.tld,TLD文件通常就以標簽處理器命名,并存放在“/WEB-INF/目錄之下。請參看清單D。 清單D:HTML編碼標簽描述器<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE taglibPUBLIC "-//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文件

現(xiàn)在可以告訴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-appPUBLIC "-//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 >

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

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

結論

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 首页 - 军军小站|张军博客| 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 出国劳务公司_正规派遣公司[严海] | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 | 成都APP开发-成都App定制-成都app开发公司-【未来久】 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 釜溪印象网络 - Powered by Discuz! | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 山楂片_雪花_迷你山楂片_山楂条饼厂家-青州市丰源食品厂 | 工作服定制,工作服定做,工作服厂家-卡珀职业服装(苏州)有限公司 | 书信之家_书信标准模板范文大全| 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 飞飞影视_热门电影在线观看_影视大全 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | 微型气泵-真空-蠕动-水泵-厂家-深圳市品亚科技有限公司 | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 |