北方站长站
客服热线:0632-5117766

用XSLT和XML改进Struts

[2005-12-26 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:改进 Model XML Struts XSLT 可以 一个 Bean 样式 2x

  

  XML文件流根据模式(model)和上下文环境而生成,样式表对XML文件流再进行加工。虽然一些XSLT转换器可以支持一些扩展,通过这些扩展你可以在样式表中调用Java或是其他类型的语言。但这些扩展往往缺乏移植性,而且使用起来比较麻烦。这样就不能再把业务逻辑放入到XSL样式表。

  标准技术的使用

  XPath是一种强大的表达式语言,用来从XML流中抽取出数据。我们可以通过使用<xsl:for-each>、<xsl:if>、<xsl:choose>这类的XSLT元素配合上模板属性值,使用起来比Struts中的HTML、Logic、Bean这些标签库好很多。XSLT使用了W3C(World Wide Web Consortium)标准的语言,不但提供了和Struts标签库类似的功能,而且还有很大的提高。此外XSLT还有一些标签库没有的强大功能,比如XSLT支持函数和递归。

  其他需要考虑的问题

  这章中我们讨论在Model2x中的如何实现国际化、错误处理、当前的一些限制以及以后可能的对Model 2x的改进。

  应用的国际化

  本地化水平和目标语言的复杂程度会影响到了页面的布局,还有文本消息和图片。例如,阿拉伯文从右向左书写而旧式的中文从上到下书写。这些语言不但需要文本的翻译,同时还需要完全不同的页面布局。Struts开发人员通常把所有的文本信息和图像资源的链接根据不同的地区保存到一起。根据用户的地区,Struts就会调用适当的资源。

  Model 2x通过自动把资源存储到DOM中,然后把他们传递给视图。为了提高资源访问的效率可以对资源的读取和DOM的建立缓存。Model 2x 只是简单地把资源DOM插入到最终的DOM树中。这个最终的DOM树也包括了从Form Bean生成的动态内容。你可以轻松地用XPath在XSLT样式表中访问资源。应用的国际化不再通过Java资源捆绑技术实现,而是通过纯XML技术——根据用户当前的地区动态地切换样式表来实现。

  错误处理

  验证错误通常指的是在HTML表单中输入的参数出现的错误。通常我们把这类错误和其他类型的错误区分开来。验证错误以外的错误将被认为是较严重的错误。

  在Struts中,可以在Form Bean中进行表单的验证,出现错误时会返回ActionError对象。把这些对象存储在请求中,然后串行化到Dom树中。这样样式表就可以很容易地就把这些错误显示到窗体中。同样的,用户可以也可以在Action中识别错误,然后把它们存储到请求中,进一步地串行化,最后用样式表来处理。
样式表会依据错误的类型和错误的内容选择是简单的显示一个错误的消息,还是将先前的页面重新显示,让用户修改数据后再提交。

  工作流程

  在这个Model 2x架构中,struts-config.xml文件并不能像在原来的Struts架构中那样负责控制工作流程。不过,要说明的是这个问题实际上并不是Model 2x的问题,而是这篇文章我们这个实现方案的问题。你可以在你自己的实现方案中修正这个问题。

  输出

  Model 2x架构的一个重要的特性就是能够动态改变输出的内容类型以及用户接口的风格。比方说,同样的应用项目可以针对老版本的浏览器生成HTML 3.2代码而同时又为新版本的浏览器生成HTML 4.0的代码。利用XSLT可以方便地获得各种输出格式: XHTML、XSL/FO、WML、简单的文本、CSV、PDF、SVG等等。

  XSLT处理流程

  Model 2x标志着Web框架在分离版面设计与风格逻辑以及引导样式表这两方面有了提高。Apache的Cocoon框架就表现出s了这两个优点。例如,某个样式表可以定义在整个站点中某类特定表格的显示样式,比如下面这张样式定义了用户信息表格的显示样式。这张样式表可能输出如下一个表格:

<xsl:template match="customer-info">
<table>
<tr>
<td>Name</td>
<td><xsl:value-of select="name"/></td>
</tr>
</table>
</xsl:template>

  而另一个样式表也可以通过创建一个如下的嵌入表来设计这个表格。

<xsl:template match="table">
<table cellpadding="0" cellspacing="0" border="0" bgcolor="red">
<tr>
<td valign="top">
<table cellpadding="4" cellspacing="1" border="0">
<xsl:apply-templates select="tr"/>
</table>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

  性能

  Model 2x当前的这个实现方案是动态的创建XML Dom树,然后把它交给XSLT转换器。通过使用SAX(Simple API for XML)显著地提高了性能,特别表现在等待时间和大文档的内存驻留上。此外,样式表的编译也提升了XSLT的处理次数。Xalan是Apache的一个XSLT处理器项目。它提供了一种把样式表编译成Java的class文件的机制,也就是是我们所说的translets。

  客户端处理

  目前,IE5/6、Mozilla这样的浏览器已经能够在客户端执行XSLT转换。如果要减轻Web服务器的负担,可以在客户端执行XSLT转换。XInclude(XML Inclusions)可以从服务器下载资源和其他的数据,并建立缓存。XInclude提供了一种通用的方法来识别和处理它的内含物,同时还能够提供很好的性能、更少的代码冗余。当然这种方法也存在问题。最大的一个缺陷就是开发人员必须确保传递给客户的XML、XSLT文档必须是客户有权看到的内容。

  通过Model 2x来提升Struts的性能

  总之,Model 2x中使用XML和XSLT来鼓励开发人员将业务逻辑和表现逻辑加以分离,这样web应用程序更接近MVC最基本的承诺。此外它还具有一些其它的优势比如输出的文档符合XML的文档格式、标准化的语言的使用、更好的表现层适应性,更短的开发周期。

  本文由天极开发者网络与Matrix共同策划
R85北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

上一页 1 2 3 4

下一篇链接:构建可扩展的Java图表组件

上一篇链接:Java中的两个特殊变量this和super

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面