??xml version="1.0" encoding="utf-8" standalone="yes"?>伊人久久大香线,97精品国产97久久久久久,9久re热视频在线精品http://www.aygfsteel.com/evanzhang/My Blog JAVAzh-cnMon, 14 Jul 2025 21:45:54 GMTMon, 14 Jul 2025 21:45:54 GMT60Apache Cocoon入门http://www.aygfsteel.com/evanzhang/archive/2006/10/19/76128.htmlMy JAVA BlogMy JAVA BlogThu, 19 Oct 2006 04:23:00 GMThttp://www.aygfsteel.com/evanzhang/archive/2006/10/19/76128.htmlhttp://www.aygfsteel.com/evanzhang/comments/76128.htmlhttp://www.aygfsteel.com/evanzhang/archive/2006/10/19/76128.html#Feedback2http://www.aygfsteel.com/evanzhang/comments/commentRss/76128.htmlhttp://www.aygfsteel.com/evanzhang/services/trackbacks/76128.html

作ؓ对其真实用途的一个比喻,CocoonQ茧Q这个名字具有深q的意义。它代表一U包裹结构,其中的某些东西将从幼虫阶D|长ؓ丽的蝴Ӟq准备展飞。但在Apache Cocoon?a target="_target">主页上,没有对这个y妙的比喻q行说明。相反,它只是对q个目q行了准的技术性解释:“Apache Cocoon是一个XML发布框架Q它XML和XSLT技术在服务器应用程序中的应用提升到一个新U别。Cocoon的宗旨是提升道化SAX处理的性能和扩展性,通过对内宏V逻辑和样式的分离来营造一个灵zȝ环境。?br />

到底什么是Cocoon?

Cocoon最初的型态是一个简单的Java servletQ全部用标准W3ClgQ用文档对象模型QDOMQ来解析文档Q用XML来捕捉和格式化数据,用XSLT来{换数据和合ƈ/操纵XML文档Qƈ用XSL来管理文档的表示以便通过Web传送。但Z很快p求它为其他类型的内容提供服务Q比如程序和文档Q,所以Cocoon逐渐发展成ؓ一个完整的、基于XML的发布框架及pȝ?br />

随着旉的推U,几个新的XMLlg问世了,比如SAX。另外,XSL也逐渐l分为几个不同的lgQ分别提供Transforms、Formatting Objects和XPath功能。这些新标准直接促成了Cocoon 2?002q的问世Q它定义了一个标准的Q而且仍在发展的)内容理pȝQƈ面向公众开放?br />
q前来_我们可采取几U不同的方式来描qCocoonQ一个XML发布框架Q一个数据源聚合器以及一pd道和组件的集合?/p>

作ؓ发布框架的Cocoon

CocoonZ对SAX事g的管道式处理。Web应用E序如果围绕q个框架来构建,获得较好的扩展性和性能。利用一个集中式的配|系l,你可以方便地创徏、部|和l护Web应用E序。Cocoon使用了一个缓存系l,所有组仉可根据需要进行动态配|。接收到用户h后,会自动检查缓存,判断h的URIQ统一资源标识W)是否存在。如果存在,q接传递缓存的内容Q不需要通过一个管道来处理它?br />

Cocoon作ؓ数据源聚合器

Cocoon可作Z个抽象的引擎使用Q通过一个Java servletQ,它基于自定义的协议处理程序,能通过标准URI来访问外部数据源。Cocoon甚至能递归调用自nQ数据能在多个管道化阶段同时处理Q从而提高处理速度和效率?br />

道和组?br />

Cocoon体系l构的核心设计思想是模块化和抽象处理。Cocoon道在概念上和UNIXpȝ中用的道差不多,只是Cocoon道中的所有元素都是通过解析XML文档而创建的SAX事g。Cocoon识别3U类型的道元素Q组ӞQ分别是生成器(generatorsQ、{换器QtransformersQ和序列化器QserializersQ。其中,生成器用一个请求的URI来生成SAX事gQ{换器使用SAX事gq生成其他SAX事gQ序列化器用SAX事gq生成一些响应?br />

Cocoon的用?br />

单地_Cocoon道用于生成和递送内宏V内定w用的是某U可识别的Ş式,׃个生成器和一个序列化器构成。在较典型的Cocoon道中,生成器之后可能紧接着一个或多个转换器链Q而序列化器用于生成不同格式的输出。采取这U方式,同一个源文档可ؓWeb览器生成HTML格式的内容,为WAP讑֤生成WML格式的内容,为打印输出生成PDF格式的内宏V?br />
作ؓ一个开发^収ͼCocoon最吸引人的地方在于它提供了品种丰富的生成器、{换器和序列化器。h们ؓCocoon 2目开发和捐赠了许多这Llg。一l捐赠,q些lg可q行定制Q以d新功能或者进行扩展,从而创建出新的lg?b>?/b>Aȝ了适用于Cocoon的一些常用生成器、{换器和序列化器?br />

表A

cd名称说明
生成?/td>DirectoryGenerator目录列表{换成XML格式Q以便从中生成SAX事g
生成?/td>FileGenerator解析一个文件或URIQƈ生成SAX事g
生成?/td>JSPGeneratorҎJSP|生成XML和SAX事g
生成?/td>ServerPagesGeneratorҎXSP|生成XML和SAX
转换?/td>i18nTransformer使用i18n字典和语a参数值来转换SAX事g
转换?/td>XincludeTransformer通过为现有的SAX添加SAX事gQ从而处?em>xinclude命名I间Qƈ包括外部?/em>
转换?/td>XSLTransformerҎXSLT样式表定义来转换SAX事g?/td>
序列化器HTMLSerializerҎSAX事g来生成HTML响应
序列化器PDFSerializerҎSAX事gQ用Apache FOPQ格式输出处理器Q来生成PDF
序列化器SVG2JPGSerializerҎSVG SAX事gQ用Apache Batik来生成JPEG囑փ
序列化器TextSerializerҎSAX事g来生成纯文本输出Q适用于非XML文本Q比如CSS或程序语a代码
序列化器XMLSerializerҎSAX事g来生成XML响应
可由Cocoon使用的部分组?br />

如所你见QCocoon的功能ƈ非只是简单地数据格式化成HTML。在未来的文章中Q我们将研究如何在Cocoon环境中创建和处理文档Qƈ更详l地介绍在这个环境中工作所牉|的问题。就目前来说Q你只需理解Cocoon是针对多U目的来捕捉、呈现和递送Web内容的一U方式?/p>

My JAVA Blog 2006-10-19 12:23 发表评论
]]>
Apt 使用备忘http://www.aygfsteel.com/evanzhang/archive/2006/09/23/71416.htmlMy JAVA BlogMy JAVA BlogFri, 22 Sep 2006 17:09:00 GMThttp://www.aygfsteel.com/evanzhang/archive/2006/09/23/71416.html----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-cache search package                 搜烦?br />----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-cache show package                   获取包的相关信息Q如说明、大、版本等
----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get install package                      安装?br />----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get install package - - reinstall    重新安装?br />----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get remove package                   删除?br />----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get remove package - - purge    删除包,包括删除配置文g{?br />----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get update                                   更新?br />----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get dist-upgrade                          升pȝ
----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get -f install                                  强制安装
----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-cache depends package             了解使用依赖
----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-cache rdepends package            了解某个具体的依?br />----------------------------------------------------------------------------------------------------------------------------------------
sudo apt-get build-dep package                 安装相关的编译环?br />----------------------------------------------------------------------------------------------------------------------------------------


My JAVA Blog 2006-09-23 01:09 发表评论
]]>
用XML和XSL来生成动态页?/title><link>http://www.aygfsteel.com/evanzhang/archive/2006/09/22/71283.html</link><dc:creator>My JAVA Blog</dc:creator><author>My JAVA Blog</author><pubDate>Fri, 22 Sep 2006 04:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/evanzhang/archive/2006/09/22/71283.html</guid><description><![CDATA[XMLQ可扩展标记语言Q看h可能像某UW3C标准——现在没有什么实际媄响,即以后能派上用场,也是很久以后的事。但实际上,它现在已l得C应用。所以,不要{到XML已被加进了你最喜爱的HTML~辑器中才开始用它。它现在可以解军_U内部问题和B2Bpȝ问题?<br /><br />在Sparks.comQ我们用XML来标准化从Java对象到HTML数据昄{不同系l之间的数据表示?<br /><br />特别需要指出的是,我们发现Q只要以非常基本的XMLl构来实现标准化Q就可以更容易地׃n和操作数据。在q一q程中,我们发现了用XML的很多有效方法。下面详l介l我们现在的应用情况?<br /><br />标准?br />在用XML之前Q徏立与你要使用的信息不同的XML数据格式?<br /><br />生成动态XML<br />从数据库中生成HTMLq不新鲜Q但生成XML却很新鲜。这里我们介l具体的生成步骤?<br /><br />用XSL作ؓ模板语言<br />XSLQ可扩展样式表语aQ是定义XML数据昄格式的好ҎQ如果写成几个静态模板会更有效?<br /><br />生成HTML<br />XML加上XSLq于HTML。这听v来似乎不对,但用h见的我们的HTML面其实是XML和XSL共同产生的效果?<br /><br /><br />一、标准化<br /><br />XML的能力来自于它的灉|性。但不幸的是Q它有时太灵zMQ以至于你会面对一个空白的面Q发愁该怎么解决问题?<br /><br />在Q何XML的项目中Q第一步工作都是创建标准的数据格式。ؓ此你要作Z下决定: <br /><br />&#8226; 要涉及哪些数?br />&#8226; 是否要用DTDQ文件类型定义)<br />&#8226; 是否要用DOMQ文档对象模型)或SAXQXML的简化APIQ解?br /><br />定数据Q?br />因ؓ没有标准的XML格式Q开发者可以自由地开发自q格式。然而,如果你的格式只能被一个应用程序识别,那么你只能运行这个程序来使用该格式。如果还有其他程序也能读懂你的XML格式Q那昄会更有帮助。如果某个XML格式被修改,则用它的系l可能也需要被修改Q所以你应该建立可能完整的格式。因为大多数pȝ忽略它们无法识别的标{,所以改变一个XML格式的最安全的方法是d标签Q而不是修Ҏ{?<br /><br />单击此处查看XML数据格式实例 <br /><br />在Sparks.comQ我们查看了不同的品展C需要的所有品数据。尽ƈ不是所有的面都用全部数据,但我们还是由此开发出适用于所有数据的非常完整的XML数据格式。例如,我们的品明l信息页面显C的数据要比产品览面多。然而,我们在这两种情况下仍然用相同的数据格式Q因为每个页面的XSL模板都只使用它所需要的字段?<br /><br />是否使用DTD<br />在Sparks.comQ我们用组l良好的XMLQ而不使用仅仅是正的XMLQ因为前者不需要DTD。DTD在用Ld看到面之间加入了一个处理层。我们发现这一层需要太多的处理。当Ӟ在以XML格式与其他公叔R信Ӟ使用DTDq是很不错的。因为DTD能在发送和接受时能保证数据l构正确?<br /><br />选择解析引擎<br />现在Q可以用的解析引擎有好几个。选择哪一个几乎完全取决于你的应用需要。如果你军_使用DTDQ那么这个解析引擎必能使你的XML被DTD验证。你可以验证另攑ֈ一个进E中Q但那样会媄响性能?<br /><br />SAX和DOM是两个基本的解析模型。SAXZ事gQ所以在XML被解析时Q事件被发送给引擎。接下来Q事件与输出文g同步。DOM解析引擎为动态XML数据和XSL样式表徏立层ơ树状结构。通过随机讉KDOM树,可以提供XML数据Q就象由XSL样式表来军_一栗SAX模型上的争论主要集中于对DOMl构的内存降低过度和加快XSL样式表解析时间羃短方面?<br /><br />然而,我们发现使用SAX的很多系lƈ没有充分发挥它的能力。这些系l用它来建立DOMl构q过DOMl构来发送事件。用q种ҎQ在MXML处理之前必须从样式表中徏立DOMQ所以性能会下降?<br /><br />二、生成动态XML<br /><br />一旦徏立了XML格式Q我们需要一U能够将其从数据库中动态移植的Ҏ?<br /><br />生成XML文档相对来说比较单,因ؓ它只需要一个可以处理字W串的系l。我们徏立了一个用Java Servlet、Enterprise JavaBean server、JDBC和RDBMSQ关pd数据库管理系l)的系l?<br /><br />&#8226; Servlet通过把生成XML文档的Q务交lEnterprise JavaBean (EJB)来处理品信息请求?br />&#8226; EJB使用JDBC从数据库里查询所需的品详l信息?br />&#8226; EJB生成XML文gq把它传递给Servlet?br />&#8226; Servlet调用解析引擎Q从XML文g和静态的XSL样式表中创徏HTML输出?<br /><br />Q有关XSL应用的其他信息,请参阅用XSL作ؓ模板语言。) <br /><br />生成XML的例?br />在Java中创建XML文档字符串的真正代码可以分成几个Ҏ和类?<br /><br />启动XML生成q程的代码放在EJBҎ里。这一实例会立卛_Z个StringBufferQ以便存储生成的XML字符丌Ӏ?<br /><br />StringBuffer xml = new StringBuffer(); <br />xml.append(XmlUtils.beginDocument("/browse_find/browse.xsl", "browse", request)); <br />xml.append(product.toXml()); <br />xml.append(XmlUtils.endDocument("browse");<br />out.print(xml.toString());<br /><br /><br />后面的三个xml.append()变元本n是对其他方法的调用?<br />产生文g?br />W一个附加方法调用XmlUtilscL产生XML文g头。我们的Java Servlet中的代码如下Q?<br /><br />public static String beginDocument(String stylesheet, String page)<br />{ <br />    StringBuffer xml = new StringBuffer(); <br />    xml.append("<?xml version=\"1.0\"?>\n")<br />    .append("<?xml-stylesheet href=\"")<br />    .append(stylesheet).append("\"") <br />    .append(" type =\"text/xsl\"?>\n"); <br />  xml.append("<").append(page).append(">\n"); <br />  return xml.toString(); <br />} <br /><br />q段代码生成了XML文g头?lt;?xml>标签把本文g定义为支?.0版本的XML文g。第二行代码指向用以昄数据的正样式表的位|。最后包括进ȝ是项U标{(本实例中?lt;browse>Q。在文g末尾Q只?lt;browse>标签需要被关闭?<br /><br /><?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <browse> <br /><br />填入产品信息<br />完成了文件头后,控制Ҏ会调用Java对象来生它的XML。本例中调用的是product对象。product对象使用两个Ҏ来生它的XML表示。第一个方法toXML()通过产生<product>?lt;/product>标签来徏立product节点。然后它会调用internalXML()Q这样就能提供品XML所需的内宏VinternalXML()是一pd的StringBuffer.append()调用。StringBuffer也被转换成字W串q返回给控制Ҏ?<br />public String toXml()<br />    { <br />    StringBuffer xml = new StringBuffer("<product>\n"); <br />    xml.append(internalXml()); <br />    xml.append("</product>\n"); <br />    return xml.toString(); <br />    } <br /><br />public String internalXml() <br />    { <br />    StringBuffer xml = new<br />    StringBuffer("\t")<br />        .append(productType).append("\n"); <br />    xml.append("\t").append(idValue.trim())<br />        .append("\n"); <br />    xml.append("\t").append(idName.trim())<br />        .append("\n"); <br />    xml.append("\t").append(page.trim())<br />        .append("\n"); <br />?<br />      xml.append("\t").append(amount).append("\n"); <br />    xml.append("\t").append(vendor).append("\n"); <br />    xml.append("\t\n"); <br />    xml.append("\t").append(pubDesc).append("\n"); <br />    xml.append("\t").append(venDesc).append("\n"; <br />?<br />    return xml.toString(); <br />} <br /><br /><br />关闭文g<br />最后,XMLUtils.endDocument()Ҏ被调用。这个调用关闭XML标签Q本例中为)Qƈ最l完成架构好的XML文g。来自控制方法的整个StringBuffer也{换成字符Ԍq返回给处理最初HTTPh的servlet?<br /><br />三、用XSL作ؓ模板语言<br /><br />Z得到HTML输出Q我们把生成的XML文g和控制XML数据如何表示的XSL模板相结合。我们的XSL模板q心组l的XSL和HTML标签l成?<br /><br />开始徏模板<br />我们的XSL模板开始部分与下面q段代码cM。第一行代码ؓ必需代码Q将本文件定义ؓXSL样式表。xmlns:xsl=属性引用本文g所使用的XML名称I间Q而version=属性则定义名称I间的版本号。在文g的末,我们关闭标签?<br /><br />?lt;xsl:template>开始的W二行代码确定了XSL模板的模式。Match属性是必需的,在这里指向XML标签<basketPage>。在我们的系l里Q?lt;basketPage>标签里包?lt;product> 标签Q这使得XSL模板可以讉K嵌在<product>标签内的产品信息。我们又一ơ必d文g末尾关闭<xsl:template>标签?<br /><br />接下来,我们来看一看组l良好的HTML。由于它被XML解析引擎处理Q所以必ȝ合组l良好的XML的所有规则。从本质上来Ԍq意味着所有的开始标{ֿL对应的结束标{。例如,通常不被l束?lt;P>标签Q必ȝ</P>关闭?<br /><br /><br /><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <br />version="1.0"><br /><xsl:template match="basketPage"><br /><html><br /><head><br /><title>Shopping Bag / Adjust Quantity</title> <br /></head><br /><body bgcolor="#cccc99" bgproperties="fixed" link="#990000" vlink="#990000"><br /><br><br />?br> </xsl:template> <br /></xsl:stylesheet><br /><br /><br />在模板的M内,有很多XSL标签被用于ؓ数据表示提供逻辑。下面解释两个常用的标签?<br />Choose<br /><xsl:choose>标签cM于传l编E语a中if-then-elsel构的开始部分。在XSL中,choose标签表示在代码进入的部分中,赋值将触发动作的发生。拥有赋值属性的<xsl:when>标签跟在choose标签后面。如果赋值是正确的,位于<xsl:when>的开始和l束标签之间的内容将被用。如果赋值错误,׃?lt;xsl:otherwise>的开始和l束标签之间的内宏V整个部分用</xsl:choose>来结束?<br /><br />在这个例子里Qwhen标签会ؓquantity标签查XML。如果quantity标签里含有gؓ真的error属性,quantity标签会昄列在下面的表格单元。如果属性的g为真QXSL会昄otherwise标签间的内容。在下面的实例里Q如果error属性不真,则什么都不会被显C?<br /><br /><xsl:choose><br /><xsl:when test="quantity[@error='true']"><br /><td bgcolor="#ffffff"><img height="1" width="1" src="http://img.sparks.com/Images/I-Catalog/sparks_images/sparks_ui/clearpixel.gif"/></td><br /><td valign="top" bgcolor="#ffffff" colspan="2"><font face="Verdana, Arial" size="1" color="#cc3300"><b>*Not enough in stock. Your quantity was adjusted accordingly.</b></font></td> <br /></xsl:when><br /><xsl:otherwise> <br /></xsl:otherwise><br /></xsl:choose><br /><br /><br />For-each<br /><xsl:for-each>标签可以用来对相似XML数据的多U情况应用同一个样式表。对于我们来_可以从数据库中取Zpd产品信息Qƈ在Web上q行l一格式化。这里有一个例子: <br /><xsl:for-each select="package"><br /><xsl:apply-templates select="product"/><br /></xsl:for-each><br /><br /><br />for-each 循环在程序遇到标{时开始。这个@环将在程序遇到标{时l束。一旦这个@环运行,每次标签出现旉会应用这个模ѝ?<br /><br />四、生成HTML<br /><br />来的某一时刻Q浏览器会集成XML解析引擎。到那时Q你可以直接向浏览器发送XML和XSL文gQ而浏览器则根据样式表中列出的规则昄XML数据。不q,在此之前开发者们不得不在他们服务器端的pȝ里创析功能?<br /><br />在Sparks.comQ我们已l在Java servlet里集成了一个XML解析器。这个解析器使用一U称为XSLT (XSL Transformation)的机Ӟ按XSL标签的说明向XSL模板中添加XML数据?<br /><br />当我们的Java servlet处理HTTPhӞservlet索动态生成的XMLQ然后XML被传l解析引擎。根据XML文g中的指oQ解析引擎查N当的XSL样式表。解析器通过DOMl构创徏HTML文gQ然后这个文件再传送给发出HTTPh的用戗?<br /><br />如果你选择使用SAX模型Q解析器会通读XML源程序,为每个XML标签创徏一个事件。事件与XML数据对应Qƈ最l按XSL标签向样式表中插入数据?img src ="http://www.aygfsteel.com/evanzhang/aggbug/71283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/evanzhang/" target="_blank">My JAVA Blog</a> 2006-09-22 12:16 <a href="http://www.aygfsteel.com/evanzhang/archive/2006/09/22/71283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改源ƈ升更新ubuntuhttp://www.aygfsteel.com/evanzhang/archive/2006/09/20/70929.htmlMy JAVA BlogMy JAVA BlogWed, 20 Sep 2006 13:50:00 GMThttp://www.aygfsteel.com/evanzhang/archive/2006/09/20/70929.htmlhttp://wiki.ubuntu.org.cn/%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97/DapperDrake

My JAVA Blog 2006-09-20 21:50 发表评论
]]>
վ֩ģ壺 | ʯ| | Ͳ| | | | | | Ϫ| | | ϰ| | | | ɽ| | ƽɽ| ֦| ͷ| | | | ̨| ʯ| | ¹| | | | | ϲ| н| | | ˮ| | | گ| ˹|