|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译)j2ee|jsJSP自界说标志为在静态Web页中将暗示与营业逻辑分别供应了一种尺度化的机制,使页面计划者能够将注重力放到暗示上,而使用程序开辟职员编写后真个代码。在J2EE探究者的这篇文章中,具有企业看法的开辟者KyleGabhart先容了JSP自界说标志的基础常识,并引诱您完成将它们到场到JSP页面的五步历程。
您大概传闻如今有上百种分歧的体例,可是在开辟Web使用程序时将暗示逻辑与营业逻辑分别是很主要的。最近几年来,Java平台已开展为在系统布局条理上到场了这类分别。比方,在JSP系统布局中到场JavaBean组件使开辟职员利用JSP标志取得和设置经由出格编码的Java组件上的属性。这些组件大概JavaBean再代表暗示层实行后端营业处置。
JSP自界说标志是JSP/JavaBean系统布局的产品。像JavaBean手艺一样,自界说标志有助于将暗示逻辑与营业逻辑分别。而且自界说标志成了Web计划者的HTML、XML和Javascript天下与软件工程师的Java代码、SQL挪用和算法天下之间的桥梁。
在本月的J2EE探究者中,您将学到在JSP页中利用JSP自界说标志的一些基础常识。我们起首先容JSP标志,然后间接进进创立标志、将它分离到JSP容器并在JSP页面中利用它的历程。在本文的最初,我们将扼要会商Java尺度标志库(JavaStandardTagLibrary,JSTL),这是一组能够在您的Java开辟项目中利用的、尺度化的JSP自界说标志。
JSP自界说标志
JSP自界说标志是用户界说的标志,它遵守JSPJavaBean标志(即useBean、getProperty和setProperty)所利用的一种特别的XML语法。当servlet容器处置自界说标志时,会挪用一个大概多个Java类文件处置它,与用Java类文件处置JSP页面的JavaBean挪用的体例基础一样。处置标志今后,容器将取其名字和属性、和标志注释中大概有的任何内容,并将它传送给一个大概多个类文件举行处置。
Java开辟职员编写标志处置程序类以处置标志并处置一切必要的Java代码和数据操纵。关于Web计划者来讲,自界说标志与尺度HTML标志除都能够使用后端静态数据外,它们看上往与利用起来没甚么区分。准确编写自界说标志可让Web计划者创立、查询和操纵数据而无需编写一行Java代码。准确利用自界说标志使Java开辟职员不用再在编码过程当中思索暗示层。如许使用程序开辟小组的每位成员都能够存眷于他大概她最善于的事物。
完成JSP自界说标志
JSP系统布局必要以下组件以完成自界说标志:
在每页中有一个JSP声明
Web使用程序形貌符(web.xml)中的一个项
一个包括特别XML文件和为处置自界说标志而挪用的Java类的JAR文件
鄙人面几节,您将一步一步地进修怎样满意这些请求并将自界说标志到场到JSP页面中。要想乐成完成JSP自界说标志,您必要接纳上面五个步骤:
编写标志处置程序类。
创立标志库形貌符(TLD)。
使TLD文件和处置程序类可会见。
援用标志库。
在JSP页面中利用标志。
这些内容是相称基础的,也不必花很长工夫。就让我们入手下手吧。
第1步.编写标志处置程序类
鄙人面的例子中,我们将利用一个十分复杂的显现以后工夫和日期的自界说标志例子。上面就是DateTag:
<abc:displayDate/>
我们要做的第一件事是编写标志处置程序类。在实行援用自界说标志的JSP页面时,JSP容器判别每个自界说标志。当容器碰到一个标志时,它挪用与这个自界说标志相干联的标志处置程序,我们将在前面更多地会商这个历程。然后,每个标志处置程序完成JSPAPI中的一个特别接口。标志有两品种型:能够处置标志内容(大概注释)的标志和不克不及处置标志内容的标志:
<abc:tagWithNoBodyattribute="value"/>
<abc:tagWithBodyattribute="value">
Thisissomebodycontentthatthetaghandlercanoperateupon.
</abc:tagWithBody>
在DateTag例子中不必要到场注释内容,由于它只显现以后日期。因而,我们的处置程序类将完成Tag接口(通常为经由过程扩大TagSupport类)。假如我们要创立一个能够处置注释的标志,那末我们就必要完成BodyTag接口(通常为经由过程扩大BodyTagSupport类)。清单1显现了DateTag的处置程序类:
清单1.标志处置程序类
packagemyTags;
importjavax.servlet.jsp.tagext.*;
importjavax.servlet.jsp.*;
importjavax.servlet.http.*;
importjava.text.*;
importjava.util.*;
publicDateTagextendsTagSupport{
publicintdoStartTag()throwsjavax.servlet.jsp.JspException{
HttpServletRequestreq;
Localelocale;
HttpJspPageg;
DateFormatdf;
Stringdate;
JSPWriterout;
req=(HttpServletRequest)pageContext.getRequest();
locale=req.getLocale();
df=SimpleDateFormat.getDateInstance(
SimpleDateFormat.FULL,locale);
date=df.format(newjava.util.Date());
try{
out=pageContext.getOut();
out.print(date);
}catch(IOExceptionioe){
thrownewJspException("I/OError:"+ioe.getMessage());
}//endtry/catch
returnTag.SKIP_BODY;
}//enddoStartTag()
}//endDateTag
关于这段代码的申明
关于DateTag处置程序类有几件事值得一说。起首看一下办法声明。假如我们间接完成Tag接口,那末就必要完成几个办法声明。由于TagSupport类是复杂的、详细类,它完整完成了在Tag接口中声明的办法,我们能够只完成那些在自界说标志中要利用的办法。在这个复杂的例子中,我们只完成了doStartTag()办法,它是在碰到入手下手标志时挪用的。
您还大概注重到doStartTag()办法前往SKIP_BODY。固然其缘故原由是我们的复杂日期标志没有注释。您要注重的最初一件主要的事变是利用了pageContext对象会见输入缓存以间接向输入流发送内容。您大概还记得在本系列之前的文章说过,pageContext对象是一个隐式对象,它供应对与以后页面有关的属性的会见。
编写了源代码文件后,我们像编译一切其他Java类一样编译这个类(确保在类路径中到场Servlet/JSPJAR文件),然后将编译的类文件放到Web使用程序的类目次(WEB-INF/classes)中。假如我们开辟的是几个标志大概界说有标志变量的标志,那末我们就会有多个标志处置程序类。在这类情形下我们大概选择将处置程序类打包在一个JAR文件中而不是使它们成为类目次中的分离的文件。
第2步.创立TLD
下一步是界说包括自界说标志与处置它的Java类(或多个类)之间的映照的库。这个库是在一个名为标志库形貌符(TLD)的XML文档中界说的。我们将从DateTag例子DateTagLib.tld中挪用这个TLD。注重“.tld”是这类文件的尺度扩大名。
清单2.DateTagLib.tld文件
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<taglib>
<tlibversion>1.0</tlibversion>
<info>Asimpletaglibrary</info>
<tag>
<name>displayDate</name>
<tagclass>myTags.DateTag</tagclass>
<bodycontent>empty</bodycontent>
<info>DisplayDate</info>
</tag>
</taglib>
DateTagLib.tld是一个杰出的、最小的标志库形貌符文件。一切关头信息都包括在Tag标志中,在这里映照了标志名和处置程序类,我们声了然标志关于注释内容的敏理性。关于更庞大的情形,我们可使用其他的XML标志以供应有关库和标志的更多信息。在一个库中界说多个标志也很罕见。
第3步.使TLD和处置程序类可会见
第3步是使这个类大概这些类和TLD能够被Web使用程序会见。有两种办法:能够将类和TLD打包到一个JAR文件中,再将这个JAR文件贮存在Web使用程序的lib目次中,也能够将类文件分离地放到classes子目次中并将TLD文件放到Web使用程序的WEB-INF目次上面的某一名置。
在这个例子中,我们将利用第二种办法,将TLD文件和类分离地放到Web使用程序目次布局中。您能够回想起在第1步中我们已将标志处置程序类放到了classes目次中,以是我们实践上只需贮存TLD文件。TLD文件被贮存在WEB-INF目次大概子目次中,假如是部署Java文件,则贮存在JAR的META-INF/目次大概子目次。在这里,我们没有利用JAR文件,以是我们只将TLD贮存到Web使用程序的WEB-INF/lib目次中。
第4步.援用这个库
这时候,我们已编译了标志处置程序类、创立了TLD文件以界说处置程序类和标志之间的映照、并包管类和标志在使用程序中都是可会见的。下一步是创建JSP页面与标志库之间的援用。有两种办法声明JSP页面与其库之间的援用。能够经由过程Web使用程序形貌符(web.xml)声明一个静态援用,也能够间接在页面中声明一个静态援用。我们将试用这两种办法。
为了举行静态援用,起首必需将上面的项到场到web.xml文件中:
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<Web-app>
<!--DefineServlets,ServletMappings,etc.-->
<taglib>
<taglib-uri>myTags</taglib-uri>
<taglib-location>/WEB-INF/lib/DateTagLib.tld</taglib-location>
</taglib>
</Web-app>
然后,将JSP声明到场到一切必要利用自界说标志库的页面中:
<%@tagliburi="myTags"prefix="abc"%>
注重指定的uri属性与在web.xml文件中指定的taglib-uri值相婚配。
为了举行静态援用,只需在一切必要利用这个库的页面中到场一个JSP声明便可:
<%@tagliburi="/WEB-INF/lib/DateTagLib.tld"prefix="abc"%>
静态援用与静态援用的对照
在举行标志库的静态援用时,JSP声明必需查询web.xml文件以实行库查询。这意味着假如挪动大概重定名了库,大概但愿在web.xml文件中到场更多的库,就必需中断服务器、更新web.xml文件、然后从头启动服务器。静态办法让JSP页间接指向TLD地位,因此是在注释JSP页面时举行处置。
静态办法供应了页面与库的实践名和地位之间必定水平的非间接性,这能够为您供应一些改动这些属性而不修正页面的天真性。另外一方面,静态办法供应了更年夜的天真性,让您能够在运转时增添和挪动标志声明。假如您对静态办法感乐趣,可是又忧虑做了一些改动后、有大概要更新多个页面的保护包袱,那末您能够一直将JSP声明放到一个独自的JSP文件中,并在每个要会见Web使用程序的自界说库的页面中到场这一页。这使您具有在运转时只必要更新信息一次就能够增添库的天真性。
第5步.在JSP页面中利用标志
完成了一切这些筹办事情后,我们就能够在JSP页面中利用这些自界说标志了。清单3显现了包括DateTag的JSP页面的扫瞄器输入:
清单3.带有自界说标志的JSP页
<%@tagliburi="/WEB-INF/lib/DateTagLib.tld"prefix="abc"%>
<HTML>
<HEAD>
<TITLE>Datetagexample</TITLE>
</HEAD>
<BODY>
<H1>DatetagExample</H1>
<p>Hitodayis<b><abc:displayDate/></b></p>
</BODY>
</HTML>
从头启动Web服务器并测试本人的JSP页面!了局看起来相似于所示。
.DateTag的扫瞄器输入
用JSTL节俭工夫
您所必要的自界说标志功效中大概有多达百分之八十已由J2EE整体创立并尺度化了。利用现有的标志库而不是重新创立一切工具会使您节俭大批工夫和精神。只管在大众域无数十种库,不外业界搜集了一个特定的自界说库。Java尺度标志库(JSTL)是由JavaCommunityProcess计划的,其参考完成是由ApacheGroup经由过程JakartaTaglibs项目所开辟和保护的(参阅参考材料)。
JSTL界说了针对罕见Web使用程序处置需求,如变量撑持、流程把持、URL办理、XML操纵、国际化、数据库会见等等的标志。除一组丰厚的标志外,JSTL还界说了本人的表达式言语(EL)。EL使我们能够简单地会见使用程序数据并更简单在不利用剧本大概哀求时表达式的前提下操纵这些数据。
除节俭您重新开辟一切标志的工夫和精神,JSTL还具有尺度化和业界供认的一切优点。这些优点包含厂商撑持、大批先容笔墨、和有很年夜的时机找到具有JSTL履历的雇员大概承包商。
停止语
在J2EEWeb开辟中愈来愈多地必要将营业和暗示逻辑分别,JSP自界说标志供应了替换复杂的老JavaBean和Java剧本的一个有吸引力的办法。更好的是在JSTL中已存在一组已界说的尺度的自界说标志库。在J2EE探究者的这篇文章中,您履历了重新创立一个自界说标志并在JSP页面中完成它的历程。我还复杂先容了JSTL并论述了利用它而不是重新创立一切的自界说标志的优点。
下个月,我们将持续探究J2EE手艺,对Web使用程序平安系统布局举行剖析。祝这段工夫里探究康乐!
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。 |
|