JAVA教程之JSP+XML构架网站的实例
不得不提一下的是:.net是看到java红,而开发出来的工具。js|xmlXML(可扩大标志言语)看起来大概像某种W3C尺度――如今没有甚么实践影响,即便今后能派上用处,也是好久今后的事。但实践上,它如今已失掉了使用。以是,不要比及XML已被加进了你最喜好的HTML编纂器中才入手下手利用它。它如今就能够办理各类外部成绩和B2B体系成绩。
在Sparks.com,我们利用XML来尺度化从Java对象到HTML数据显现等分歧体系之间的数据暗示。
出格必要指出的是,我们发明,只需以十分基础的XML布局来完成尺度化,就能够更简单地共享和操纵数据。在这一过程当中,我们发明了利用XML的良多无效办法。上面具体先容我们如今的使用情形。
尺度化
在利用XML之前,创建与你要利用的信息分歧的XML数据格局。
天生静态XML
从数据库中天生HTML其实不奇怪,但天生XML却很奇怪。这里我们先容详细的天生步骤。
用XSL作为模板言语
XSL(可扩大款式表言语)是界说XML数据显现格局的好办法,假如写成几个静态模板会更无效。
天生HTML
XML加上XSL就即是HTML。这听起来仿佛不合错误,但用户所见的我们的HTML页面实在就是XML和XSL配合发生的效果。
1、尺度化
XML的才能来自于它的天真性。但不幸的是,它偶然太天真了,以致于你会晤对一个空缺的页面,忧愁该怎样办理成绩。
在任何XML的项目中,第一步事情都是创立尺度的数据格局。为此你要作出以下决意:
&&&
断定数据:
由于没有尺度的XML格局,开辟者能够自在地开辟本人的格局。但是,假如你的格局只能被一个使用程序辨认,那末你只能运转这个程序来利用该格局。假如另有其他程序也能读懂你的XML格局,那明显会更有匡助。假如某个XML格局被修
改,则利用它的体系大概也必要被修正,以是你应当创建尽量完全的格局。由于年夜多半体系疏忽它们没法辨认的标签,以是改动一个XML格局的最平安的办法是增加标签,而不是修正标签。
单击此处检察XML数据格局实例
在Sparks.com,我们检察了分歧的产物展现必要的一切产物数据。只管并非一切的页面都利用全体数据,但我们仍是由此开辟出合用于一切数据的十分完全的XML数据格局。比方,我们的产物明细信息页面显现的数据要比产物扫瞄页面多。但是,我们在这两种情形下仍旧利用不异的数据格局,由于每一个页面的XSL模板都只利用它所必要的字段。
是不是利用DTD
在Sparks.com,我们利用构造优秀的XML,而不利用仅仅是准确的XML,由于前者不必要DTD。DTD在用户点击和看到页面之间到场了一个处置层。我们发明这一层必要太多的处置。固然,在以XML格局与其他公司通讯时,利用DTD仍是很不错的。由于DTD能在发送和承受时能包管数据布局准确。
选择剖析引擎
如今,可使用的剖析引擎有好几个。选择哪个几近完整取决于你的使用必要。假如你决意利用DTD,那末这个剖析引擎必需能使你的XML被DTD考证。你能够将考证另放到一个历程中,但那样会影响功能。
SAX和DOM是两个基础的剖析模子。SAX基于事务,以是在XML被剖析时,事务被发送给引擎。接上去,事务与输入文件同步。DOM剖析引擎为静态XML数据和XSL款式表创建条理树状布局。经由过程随机会见DOM树,能够供应XML数据,就象由XSL款式表来决意一样。SAX模子上的争辩次要会合于对DOM布局的内存下降过分和加速XSL款式表剖析工夫延长方面。
但是,我们发明利用SAX的良多体系并没有充实发扬它的才能。这些体系用它来创建DOM布局并经由过程DOM布局来发送事务。用这类办法,在任何XML处置之前必需从款式表中创建DOM,以是功能会下落。
2、天生静态XML
一旦创建了XML格局,我们必要一种可以将其从数据库中静态移植的办法。
天生XML文档绝对来讲对照复杂,由于它只必要一个能够处置字符串的体系。我们创建了一个利用JavaServlet、EnterpriseJavaBeanserver、JDBC和RDBMS(干系型数据库办理体系)的体系。
&&&&
(有关XSL使用的其他信息,请参阅用XSL作为模板言语。)
天生XML的例子
在Java中创立XML文档字符串的真正代码能够分红几个办法和类。
启动XML天生历程的代码放在EJB办法里。这一实例会当即创立一个StringBuffer,以便存储天生的XML字符串。
StringBufferxml=newStringBuffer();
xml.append(XmlUtils.beginDocument("/browse_find/browse.xsl","browse",request));
xml.append(product.toXml());
xml.append(XmlUtils.endDocument("browse");
out.print(xml.toString());
前面的三个xml.append()变元自己就是对其他办法的挪用。
发生文件头
第一个附加办法挪用XmlUtils类来发生XML文件头。我们的JavaServlet中的代码以下:
publicstaticStringbeginDocument(Stringstylesheet,Stringpage)
{
StringBufferxml=newStringBuffer();
xml.append("<?xmlversion="1.0"?>")
.append("<?xml-stylesheethref="")
.append(stylesheet).append(""")
.append("type="text/xsl"?>");
xml.append("<").append(page).append(">");
returnxml.toString();
}
这段代码天生了XML文件头。<?xml>标签把本文件界说为撑持1.0版本的XML文件。第二行代码指向用以显现数据的准确款式表的地位。最初包含出来的是项级标签(本实例中为<browse>)。在文件开端,只要<browse>标签必要被封闭。
<?xmlversion="1.0"?><?xml-stylesheethref="/browse_find/browse.xsl"type="text/xsl"?><browse>
填进产物信息
完成了文件头后,把持办法会挪用Java对象来发生它的XML。本例中挪用的是product对象。product对象利用两个办法来发生它的XML暗示。第一个办法toXML()经由过程发生<product>和</product>标签来创建product节点。然后它会挪用internalXML(),如许就可以供应产物XML所需的内容。internalXML()是一系列的StringBuffer.append()挪用。StringBuffer也被转换成字符串并前往给把持办法。
publicStringtoXml()
{
StringBufferxml=newStringBuffer("<product>");
xml.append(internalXml());
xml.append("</product>");
returnxml.toString();
}
publicStringinternalXml()
{
StringBufferxml=new
StringBuffer("")
.append(productType).append("");
xml.append("").append(idValue.trim())
.append("");
xml.append("").append(idName.trim())
.append("");
xml.append("").append(page.trim())
.append("");
?
xml.append("").append(amount).append("");
xml.append("").append(vendor).append("");
xml.append("");
xml.append("").append(pubDesc).append("");
xml.append("").append(venDesc).append("";
?
returnxml.toString();
}
封闭文件
最初,XMLUtils.endDocument()办法被挪用。这个挪用封闭XML标签(本例中为),并终极完成架构好的XML文件。来自把持办法的全部StringBuffer也转换成字符串,并前往给处置最后HTTP哀求的servlet。
3、用XSL作为模板言语
为了失掉HTML输入,我们把天生的XML文件和把持XML数据怎样暗示的XSL模板相分离。我们的XSL模板由经心构造的XSL和HTML标签构成。
入手下手建模板
我们的XSL模板入手下手部分与上面这段代码相似。第一行代码为必须代码,将本文件界说为XSL款式表。xmlns:xsl=属性援用本文件所利用的XML称号空间,而version=属性则界说称号空间的版本号。在文件的开端,我们封闭标签。
由<xsl:template>入手下手的第二行代码断定了XSL模板的形式。Match属性是必须的,在这里指向XML标签<basketPage>。在我们的体系里,<basketPage>标签里包括<product>标签,这使得XSL模板能够会见嵌在<product>标签内的产物信息。我们又一次必需在文件开端封闭<xsl:template>标签。
接上去,我们来看一看构造优秀的HTML。因为它将被XML剖析引擎处置,以是必需切合构造优秀的XML的一切划定规矩。从实质下去讲,这意味着一切的入手下手标签必需有对应的停止标签。比方,一般不被停止的<P>标签,必需用</P>封闭。
<xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:templatematch="basketPage">
<html>
<head>
<title>ShoppingBag/AdjustQuantity</title>
</head>
<bodybgcolor="
</xsl:template>
</xsl:stylesheet>
在模板的主体内,有良多XSL标签被用于为数据暗示供应逻辑。上面注释两个经常使用的标签。
Choose
<xsl:choose>标签相似于传统编程言语中if-then-else布局的入手下手部分。在XSL中,choose标签暗示在代码进进的部分中,赋值将触动员作的产生。具有赋值属性的<xsl:when>标签跟在choose标签前面。假如赋值是准确的,位于<xsl:when>的入手下手和停止标签之间的内容将被利用。假如赋值毛病,就利用<xsl:otherwise>的入手下手和停止标签之间的内容。全部部分用</xsl:choose>来停止。
在这个例子里,when标签会为quantity标签反省XML。假如quantity标签里含有值为真的error属性,quantity标签将会显现列鄙人面的表格单位。假如属性的值不为真,XSL将会显现otherwise标签间的内容。鄙人面的实例里,假如error属性不真,则甚么都不会被显现。
<xsl:choose>
<xsl:whentest="quantity[@error=true]">
<tdbgcolor="src=http://www.163design.net/j/jsl/"http://img.sparks.com/Images/I-Catalog/sparks_images/sparks_ui/clearpixel.gif"/></td>
<tdvalign="top"bgcolor="<fontface="Verdana,Arial"size="1"color="<b>*Notenoughinstock.Yourquantitywasadjustedaccordingly.</b></font>
</td>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
For-each
<xsl:for-each>标签能够用来对类似XML数据的多种情形使用统一个款式表。关于我们来讲,能够从数据库中掏出一系列产物信息,并在Web页长进行一致格局化。这里有一个例子:
<xsl:for-eachselect="package">
<xsl:apply-templatesselect="product"/>
</xsl:for-each>
for-each轮回在程序碰到标签时入手下手。这个轮回将在程序碰到标签时停止。一旦这个轮回运转,每次标签呈现时城市使用这个模板。
4、天生HTML
未来的某一时候,扫瞄器将会合成XML剖析引擎。到当时,你能够间接向扫瞄器发送XML和XSL文件,而扫瞄器则依据款式表中列出的划定规矩显现XML数据。不外,在此之前开辟者们将不能不在他们服务器真个体系里创立剖析功效。
在Sparks.com,我们已在Javaservlet里集成了一个XML剖析器。这个剖析器利用一种称为XSLT(XSLTransformation)的机制,按XSL标签的申明向XSL模板中增加XML数据。
当我们的Javaservlet处置HTTP哀求时,servlet检索静态天生的XML,然后XML被传给剖析引擎。依据XML文件中的指令,剖析引擎查找得当的XSL款式表。剖析器经由过程DOM布局创立HTML文件,然后这个文件再传送给收回HTTP哀求的用户。
假如你选择利用SAX模子,剖析器会通读XML源程序,为每一个XML标签创立一个事务。事务与XML数据对应,并终极按XSL标签向款式表中拔出数据。
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 是一种使网页(Web Page)产生生动活泼画面的语言 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 Java 编程语言的风格十分接近C、C++语言。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 Java是一种计算机编程语言,拥有跨平台、面向对java 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
页:
[1]