`
k_lb
  • 浏览: 834045 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

Web开发框架中的架构模式比较(三)

 
阅读更多

页面内容和表现风格的分离,(XSLT

页面内容和表现风格分离的第一步,是CSS风格文件和HTML页面的分离,但是,HTML的页面内容和显示元素还是紧紧捆绑在一起。XML推广之后,XSLT也大行其道,大量地应用在web发布系统中。ASP.Netjava web框架都在朝这个方向走,只是java web框架走得更快,更远。下面进行说明。

在处理XSLT时,SAX接口要比DOM接口快得多,而且几乎不占据内存空间。令人不安的是,.Net框架到现在还没有提供SAX接口。微软提供了一套MSXML SDK,其中包含了基于COM组件的SAX实现,并提供了在VBVC中应用的实例。MSXML SAXVC用例中,需要包含头文件msxml2.h。这就是说,.Net框架无法以一种自然的方式调用MSXML SAX。还有,.Net框架的XSLT是如何实现的,即,System.Xml.Xsl.XslTransform是用什么方式实现的,是调用SAX接口,还是DOM接口。如何使用.Net框架组成一条XSLT的处理管道?我也找不到方法。也没有发现这方面的例子。

Apache Xerce项目支持XML处理,提供JavaC++版本,并提供了调用MSXML的封装;Apache Xalan项目支持XSLT处理;Apache Cocoon2.0,使用SAX接口,组成XSLT的处理管道。

Apache Xalan项目的一个例子文件UseXMLFilters.java

UseXMLFilters.java。(节录,文件头部分省略)

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

public class UseXMLFilters

{

public static void main(String[] args)

throws TransformerException, TransformerConfigurationException,

SAXException, IOException

{

// Instantiate a TransformerFactory.

TransformerFactory tFactory = TransformerFactory.newInstance();

// Determine whether the TransformerFactory supports The use uf SAXSource

// and SAXResult

if (tFactory.getFeature(SAXSource.FEATURE) && tFactory.getFeature(SAXResult.FEATURE))

{

// Cast the TransformerFactory to SAXTransformerFactory.

SAXTransformerFactory saxTFactory = ((SAXTransformerFactory) tFactory);

// Create an XMLFilter for each stylesheet.

XMLFilter xmlFilter1 = saxTFactory.newXMLFilter(new StreamSource("foo1.xsl"));

XMLFilter xmlFilter2 = saxTFactory.newXMLFilter(new StreamSource("foo2.xsl"));

XMLFilter xmlFilter3 = saxTFactory.newXMLFilter(new StreamSource("foo3.xsl"));

// Create an XMLReader.

XMLReader reader = XMLReaderFactory.createXMLReader();

// xmlFilter1 uses the XMLReader as its reader.

xmlFilter1.setParent(reader);

// xmlFilter2 uses xmlFilter1 as its reader.

xmlFilter2.setParent(xmlFilter1);

// xmlFilter3 uses xmlFilter2 as its reader.

xmlFilter3.setParent(xmlFilter2);

// xmlFilter3 outputs SAX events to the serializer.

Serializer serializer = SerializerFactory.getSerializer

(OutputProperties.getDefaultMethodProperties("xml"));

serializer.setOutputStream(System.out);

xmlFilter3.setContentHandler(serializer.asContentHandler());

// Perform the series of transformations as follows:

// - transformer3 gets its parent (transformer2) as the XMLReader/XMLFilter

// and calls transformer2.parse(new InputSource("foo.xml")).

// - transformer2 gets its parent (transformer1) as the XMLReader/XMLFilter

// and calls transformer1.parse(new InputSource("foo.xml")).

// - transformer1 gets its parent (reader, a SAXParser) as the XMLReader

// and calls reader.parse(new InputSource("foo.xml")).

// - reader parses the XML document and sends the SAX parse events to transformer1,

// which performs transformation 1 and sends the output to transformer2.

// - transformer2 parses the transformation 1 output, performs transformation 2, and

// sends the output to transformer3.

// - transformer3 parses the transformation 2 output, performs transformation 3,

// and sends the output to the serializer.

xmlFilter3.parse(new InputSource("foo.xml"));

}

}

}

Apache Cocoon项目的一个配置文件例子sitemap.xmap

Apache Cocoon项目的sitemap.xmap定义了XSLT处理管道。见下例中的<map:handle-errors>部分,错误信息经过两次XSLT处理," error2document.xsl" "apache.xsl"

/sample/tutorial/sitemap.xmap (节录,无关部分省略)

<map:pipelines>

<map:pipeline>

<map:match pattern="*-dept.xml">

<map:act set="process">

<map:parameter name="descriptor" value="context://tutorial/docs/department-form.xml"/>

<map:generate type="serverpages" src="docs/confirm-dept.xsp"/>

<map:serialize type="xml"/>

</map:act>

<map:generate type="serverpages" src="docs/{1}-dept.xsp"/>

<map:serialize type="xml"/>

</map:match>

...

<map:handle-errors>

<map:transform src="stylesheets/system/error2document.xsl"/>

<map:transform src="stylesheets/apache.xsl"/>

<map:serialize status-code="500"/>

</map:handle-errors>

</map:pipeline>

...

</map:pipelines>

ASP.NetXml Web控件例子

下面的示例从.Net框架文当中摘录,说明如何使用 Xml 控件通过示例 XSL 转换文件来显示示例 XML 文件。示例 XML 文件名为 People.xml,示例 XSL 转换文件名为 Peopletable. xsl。可以看到,asp:Xml控间只能进行一步XSLT转换。

<html>

<body>

<h3>Xml Example</h3>

<form runat="server">

<asp:Xml id="xml1"

DocumentSource="people.xml"

TransformSource="peopletable.xsl"

runat="server" />

</form>

</body>

</html>

分享到:
评论

相关推荐

    WEB开发-SSH三层框架

    在IT行业中,SSH(Struts2 + Spring + Hibernate)是一个非常经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。这个“WEB开发-SSH三层框架”项目涵盖了这三个核心组件,以及相关的数据库文件和工程...

    基于J2EE多层架构的Web开发框架研究

    通过对J2EE多层架构的研究,本文提出了一种基于五层架构的Web开发框架,该框架在传统的四层架构基础上增加了数据持久层,并且集成了Hibernate等对象持久化技术,有效地解决了传统架构中的一些问题。此外,通过使用...

    基于asp.net的web开发框架

    总之,基于ASP.NET的Web开发框架结合了三层架构和权限管理,为企业级Web应用提供了一个强大的基础。通过解压并研究这些文件,开发者可以深入理解框架的工作原理,并在此基础上快速开发出满足特定需求的业务功能。...

    伍华聪2.0Web开发框架

    在实际开发过程中,理解并熟练运用"伍华聪2.0Web开发框架"的各项功能,将有助于构建高效、稳定、易维护的Web应用。开发者可以根据项目需求,结合框架的API和最佳实践,进行定制化开发,充分发挥框架的优势。同时,...

    架构探险—从零开始写Java Web框架

    这个过程将涵盖多个关键知识点,让我们逐步深入了解Java Web开发的核心技术,并了解如何将它们整合成一个高效、灵活的框架。 1. **Servlet基础**:Java Web框架的基础是Servlet,它是Java EE规范的一部分,用于处理...

    基于MVC框架的java web开发

    在Java Web开发领域,Model-View-Controller(MVC)模式是一种广泛采用的设计模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以实现业务逻辑、数据处理和用户界面的分离...

    架构、框架、设计模式之间的关系.pdf

    例如,在Web开发中,Model-View-Controller (MVC) 是一种常见的架构模式,而Spring MVC、Struts等则是实现这种架构的具体框架。 - **区别**:框架更加具体和技术化,侧重于实现细节。相反,架构关注的是更为宏观的...

    C# web 三层架构设计

    在C# Web开发中,表示层通常由ASP.NET页面、MVC控制器或Web API组成。表示层的主要任务是提供良好的用户体验,确保用户界面的美观和易用性。 ##### 业务逻辑层(Business Logic Layer) 业务逻辑层位于表示层和...

    论文研究-基于J2EE多层架构的Web开发框架研究.pdf

    在经典的J2EE四层体系结构的基础上增加数据持久层,提出了基于J2EE五层体系结构的Web开发框架;分析了基于Struts框架的J2EE架构中实现对象持久性的局限性,从中分离出对象持久层,并将Hibernate这个面向对象的轻量级...

    架构探险 从零开始写javaweb框架书上源码

    书中的源码提供了实际的编程实践,使读者能够亲身体验到JavaWeb框架的实现过程,从而加深对Web开发原理的理解。 在描述中提到的“迅雷下载后是一个404HTML页面”,可能是指读者在尝试获取书中的源码时遇到了问题,...

    Java Web三层架构的配置详解

    Java Web三层架构是一种常见的软件设计模式,用于构建可扩展、可维护且易于测试的Web应用程序。这个模式将应用逻辑划分为三个主要层次:...初学者可以从简单的示例开始,逐步深入学习,以掌握这一重要的Web开发技术。

    ASP.NET三层架构

    才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的,而恰恰是被忽视了的一个ObjectDataSource数据源控件才是真正踏入开发门槛的关键,由此也对三层架构模式有了初步体验...

    基于LINQtoSQL的WEB开发三层架构.pdf

    在WEB开发中,通常采用三层架构模式,即表示层(Presentation Layer)、业务逻辑层(Business Logic Layer, BL)、数据访问层(Data Access Layer, DAL)。这种模式有利于分离关注点,使系统的各层独立变化和迭代。 ...

    ASP.NET WebAPI+mvc4.0+EasyUI快速开发框架+通用权限管理系统源码

    1、基于ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了代理...

    JFinal框架在Java Web开发中的应用.pdf

    尽管如此,JFinal依然是Java Web开发领域中一个值得推荐的开发框架,特别是在追求快速开发和简单配置的项目中具有很大优势。 从文章中提供的内容来看,JFinal框架的确能够满足当前快速发展的技术和Web需求,且在...

    java Web开发流行架构

    Java Web开发领域中,Struts、Hibernate和Spring是三个非常重要的框架,它们组合起来形成了经典的“SSH”架构,被广泛应用于构建企业级Web应用程序。这个架构模式为开发者提供了强大的功能和灵活性,使得复杂的业务...

    web开发三大框架

    Web开发中的三大框架,即Struts2、Spring和Hibernate,是Java EE领域中非常重要的组成部分,它们各自专注于解决Web应用程序的不同问题,共同构建了一个高效、灵活的开发环境。以下是对这三个框架的详细介绍: 1. ...

Global site tag (gtag.js) - Google Analytics