|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。jsJSP标签库先容
我用JSP和ASP编程已有一段颇长的工夫了,在这两种服务器真个编程办理计划中,我愈来愈以为JSP的功效要比ASP壮大很多。我为何要把JSP选作首选服务器端web使用程序开辟工具呢?固然,JSP诱人的特征和功效很多,但JSP的标签库是让我做出这一决意的最主要诱因之一。
为何如许说呢?缘故原由有两个方面:保护和开辟的速率。服务器端剧本言语实在就像是开辟Internet的熔炉。在一个服务器页面上,你能够很便利地夹杂各类分歧的剧本办法和对象。这类页面几乎就是修建Web的混凝土。恰是这类“质料”的夹杂赐与了服务器端剧本壮大的信息处置才能。它可让服务器端程序计划职员开辟出静态的、天真的Web页面。可是,另外一方面,剧本的自在夹杂也有其弱点,那就是保护起来十分贫苦,出格是跟着项目范围的不休增加而显得特别严峻。更糟的是,跟着代码的庞大性增添,开辟的速率就会变慢,倒霉于开辟中等和年夜型的web使用,很多中等范围大概年夜型的服务器端Web使用程序很晚才得以推出并且本钱也没法把持。别的,一旦开辟完,站点还要找及格的编程者来保护这些很是庞大的代码,了局让这些程序员成了一样平常的Web计划职员,服务器端使用程序在终极的图形计划和完成这两方面上就弱化了。
为了克制这个成绩,ASP引进了COM对象手艺,而JSP则供应了J2EE作为对策。这些办理计划都是创建在会合的、可重用代码库的机制之上。可是,他们利用起来可就太难了,进修所泯灭的工夫也良多。另有,这些办理计划并没有削减创建凌乱代码的勾引,了局,我们只能构造起年夜型的、外部布局优秀的开辟团队来利用这些手艺。关于中等的项目来讲,一般都较少利用如许的办法,但现实上,中等的web使用项目才是最多的。因而,很多项目都不能不利用一个不切合它们必要的开辟和保护情况。
幸亏,JSP供应了一个办理这一成绩的更好的举措。标签库(Taglibraries)供应了一个创建可重用代码块的复杂体例。一旦标签库计划好,它就能够在很多项目中再次利用。更便利的是,与COM和J2EE分歧,只需你明白写JSP,你无需进修任何别的的技能就能够创建一个标签库!最初,标签库还改善了Web使用程序的保护性。这类对保护性的改善体现在:容易地在JSP页面上就完成了基于XML的可定制接口。了局不可思议,Web计划职员能够创建JSPWeb使用程序而无需晓得JSP是怎样回事。如许一来,Web开辟就成为一项十分富无效率的团队开辟义务了。JSP程序员能够创建定制的标签和后端代码模块,而Web计划职员则可使用定制标签而且尽力存眷于Web计划自己。标签库办理了代码凌乱的成绩,并且做得洁净大度(现实上,XML才是办理这些成绩的实质地点,可是标签库仍是起到了相称关头的感化)。
甚么是标签库?
JSP标签库(也称自界说标签库)可当作是一种经由过程JavaBean天生基于XML的剧本的办法。从观点上讲,标签就是很复杂并且可重用的代码布局。例如说,在我们最新公布的JSPKit(在JSPInsider内)中,利用XML标签完成了对XML文档的轻松会见。请看以下的清单A。
清单A:实行XML/XSL转换的示例标签及其地点的HTML页面
<%@tagliburi="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标准(JSP1.2)中的任何特征和功效,你能够无穷制地扩大和增添JSP的功效,而无必要守候下一版本JSP的呈现。比方,你对JSP的include挪用不太中意。你能够创建本人的include标签,该标签实行的是你本人的标准。
3.简单保护
标签库使得JSP的web使用程序十分易于保护,缘故原由有:
(1)标签使用复杂,对任何人而言都很简单利用、易于了解。
(2)一切的程序逻辑代码都会合放在的标签处置器和JavaBeans中。这意味着你在晋级代码时,无必要对每一个利用该代码的页面举行修正,你只必要修正会合的代码文件即可。
(3)假如必要到场新的功效,你也无需修正任何已存在的页面,能够在标签中到场分外的属性,从而引进新的举动,而别的旧的属性稳定,如许一切旧的页面还能够一般事情。比方你有一个让一切文本变蓝的标签:
<BlueText>MyText</BlueText>
但在厥后项目中,你又想让蓝色变暗。你能够保存原本的标签,只需为其增添一个新的属性:shade,以下所示:
<BlueTextshade="teal">MyText</BlueText>
一切旧的标签仍旧能够发生蓝色的文本,但如今你可使用统一标签来发生变暗的蓝色文本了。
(4)标签提拔了代码的重用性。那些经由屡次测试和利用的代码一定具有更少的bug。以是,利用定制标签的JSP页面也一样具有更少的缺点,保护起来天然便利多了。
4.疾速的开辟工夫
标签库供应一个复杂的体例来重用代码。在服务器真个言语中,个中一个尺度的重用代码体例是利用模板。相对利用模板库,标签库是一个更好的办理举措。利用模板库,你必需为每一个项目修正模板大概且创建严厉的界面,而标签库则没有这些限定,而且具有一切面向对象的优点,能够做到天真和更有扩大性,并且,经由过程重用代码,你能够消费更少的工夫来做开辟,更多的工夫能够用在计划你的web使用上。标签库的接口也很复杂,十分简单做拔出、利用和调试。
标签的构成布局
固然标签库十分易于利用,不外要创建一个标签库的外部完成机制仍是颇庞大的,最少要比创建一个复杂的JavaBean庞大。这个庞大是来自于标签库是由几部分组成的。不外,你只必要把握了Java和JSP的常识就够了。
一个复杂的标签由上面的元素组成:
1.JavaBean:为了失掉Java与生具来的面向对象的优点,可重用的代码应当放到一个自力的代码容器中,也就是JavaBean。这些JavaBeans并非标签库必不成少的一部分,但它们是标签库用来实行所分派义务的基本代码模块。
2.标签处置器:标签处置器是标签库的真正中心。一个标签处置器(taghandler)援用它所必要的任何内部资本(JavaBean)而且卖力会见JSP页面的信息(PageContext对象)。而JSP页面则把页面上设置的标签属性和标签体中的内容都传送给标签处置器,当标签处置器完成其处置历程后,它就会把处置后的输入了局回送给JSP页面做进一步处置。
3.标签库形貌符(TLD文件):这是一个复杂的XML文件,它纪录着标签处置器的属性、信息和地位等信息。JSP容器经由过程这个文件来得知从那里及怎样挪用一个标签库。
4.Web站点的web.xml文件:这是Web站点的初始化文件,在这个文件中,必要界说了Web站点顶用到的自界说标签,和用来形貌每一个自界说标签的tld文件。
5.公布文件(WAR或JAR文件):假如你想重用自界说标签的话,你必要一个办法来将它由一个项目迁徙到其他项目中往。将标签库打包为一个JAR文件是一个复杂并且无效的体例。
6.JSP页面上的标签库声明:要在JSP页面中的利用某个自界说标签的话,必要利用标签库标示符在页面长进行声明。
看来要做的事情良多,刚入手下手用的时分固然会有点辣手,不外实在并非很难。它的要点其实不在于编码,而是在于怎样将各部分准确地构造起来。这类条理性的布局是很主要的,它令标签的利用天真和更简单转移。更主要的事,这些条理可让全部创建标签库的历程都能经由过程JSPIDE(JSP的集成开辟情况)主动完成。JSPIDE更能够主动完成创立定制标签的年夜部合作作,而你本人则只必要卖力创建代码和标签处置器。
(注重:一个标签处置器仅界说一个自界说标签;一个标签库是几个处置不异义务的标签处置器的汇合)
创建你的第一个标签
以下将一步一步地教你怎样创建自界说的标签,详细的例子是扩大JSP,令它具有本人的HTML编码功效。这个功效将一切的<和>字符用HTML代码来取代。它能够很简单地扩大为做别的的编码处置。为了简化,这个例子只注释了创建自界说标签的基础要素。
创立JavaBean
代码中的任何可重用部分都应当放到一个JavaBean中。这一点是很主要的。如许你就能够在其他项目中重用这些代码了。因为任何安排在标签处置器内的代码在标签外都是不成以重用的,因而将可重用的代码部分自力开来是很主要的。在这个例子总,为HTML编码的逻辑是经常使用的,因而放到JavaBean中,请参看清单B
清单B:HTML编码JavaBean
/*HTML_Format.java*/
publicclassHTML_FormatextendsObjectimplementsjava.io.Serializable{
/**创立新的HTML_Format*/
publicHTML_Format(){}
/**将一个字符串中一切的一切<和>字符用呼应的HTML编码取代*/
publicStringHTML_Encode(Stringas_data)
{
intli_len=as_data.length();
/*stringbuffer的长度要比本来的字符串长*/
StringBufferlsb_encode=newStringBuffer(li_len+(li_len/10));
/*轮回交换全体的<和>字符*/
for(intli_count=0;li_count<li_len;li_count++)
{Stringls_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编码标签处置器
importjava.io.IOException;
importjavax.servlet.jsp.*;
importjavax.servlet.jsp.tagext.*;
publicclassHTML_FormatTagextendsBodyTagSupport
{
/*1)在标签末将会挪用这个函数*/
publicintdoEndTag()throwsJspTagException
{
try
{/*2)失掉标签中的文本*/
BodyContentl_tagbody=getBodyContent();
Stringls_output="";
/*3)假如标签体有文本,就处置它*/
if(l_tagbody!=null)
{HTML_Formatl_format=newHTML_Format();
/*3a)将标签体的内容转换为一个字符串*/
Stringls_html_text=l_tagbody.getString();
ls_output=l_format.HTML_Encode(ls_html_text);
}
/*4)将了局写回到数据流中*/
pageContext.getOut().write(ls_output.trim());
}
catch(IOExceptione)
{thrownewJspTagException("TagError:"+e.toString());
}
/*让JSP持续处置以下页面的内容*/
returnEVAL_PAGE;
}
}
这个处置很复杂,它包含有:
1.读进位于入手下手和停止标签间的文本
2.挪用html编码函数
3.将了局前往到JSP页面。
创立标签形貌符
我们必要形貌自界说标签以让体系晓得怎样处置。该形貌文件的后缀为.tld,TLD文件一般就以标签处置器定名,并寄存在“/WEB-INF/”目次之下。请参看清单D。
清单D:HTML编码标签形貌器
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEtaglib
PUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.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>HTMLEncodingTag</INFO>
<TAG>
<NAME>HTMLEncode</NAME>
<TAGCLASS>HTML_FormatTag</TAGCLASS>
<INFO>EncodeHTML</INFO>
</TAG>
</TAGLIB>
更新WebXML文件
如今能够告知JSP容器怎样利用标签库了。为此要修正web.xml文件,详细说来是要在个中到场一个taglib的项目来注册该标签库,并为标签分派一个URI。URI是Web站点上独一使用于这一特定标签的索引。因为标签从此还大概用在分歧的Web站点上,以是你最好接纳完全的URL和/大概包名字(packagename)来包管这一独一性。这个例子是简化了,示例代码请参看清单E。
清单E:修正web.xml文件
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<!DOCTYPEweb-app
PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.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编码标签
<%@tagliburi="HTMLEncode"prefix="Examples"%>
<PRE>
<?XML:NAMESPACEPREFIX=Examples/><Examples:HTMLEncode>
<Hello,Simplesample>
</Examples:HTMLEncode>
</PRE>
清单G:典范代码的输入
<Hello,Simplesample>
whichdisplaysas:
<Hello,Simplesample>
经由过程这个标签,我就将该页面的一切代码编码了。一切的自界说标签都是在服务器上处置的。这意味着你将不会在输入的页面上看到自界说的标签。
正如你所看到的那样,创建标签并不是难事。最贫苦的是进修标签处置器的全部细节。这是一个很壮大的功效,我们不外是触及了外相。因为这一历程必要接纳的步骤良多,以是刚进门的JSP程序员大概在创建标签的时分会以为很狐疑。
结论
标签库是JSP最主要的特征之一,它还处在不休的开展中。它切实其实是一个新事物,因而还没有被普遍接纳,不外自界说标签库已剥往了它的奥秘面纱,愈来愈多的开辟者也入手下手存眷和利用它了。在2001岁暮,可意料标签库将是很多JSP项目中的一个很罕见的特征。
在这篇文章中只扼要地会商了标签库的优点。标签库实践上另有很多别的壮大的功效。标签库促使JSP开辟进进了亘古未有的新六合。对JSP开辟职员来讲这的确是一种很使人奋发的新手艺,由于他们失掉了一个可将JSP转到各个使用而且创建任何范例web使用的工具。标签库让JSP酿成了最丰厚、最具静态开辟才能的、壮大的Web编程情况。它的功效只受我们的设想和制造力限定。
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。 |
|