StrutsCX与XSLT的联姻

2008-02-23 09:41:47来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

StrutsCX是一个Struts框架的插件,属于源代码开放的产品,植根于纯XML和XSLT技术,支持多种语言。有了StrutsCX,我们可以方便地用标准的XML和XSL技术生成HTML、XML、PDF等多种输出格式,而Struts则是执行这类XSLT转换的理想的支持技术。

  StrutsCX允许我们以不同的语言和编码方式保存、输出内容,用StrutsCX可以方便地处理中文、英文、德文、法文、西班牙文以及朝鲜文、阿拉伯文、俄文等各种语言文字。

  一、简单回顾Struts

  Struts鼓励按照Model 2方式构建应用的体系。Model 2是MVC基本设计模式的一种变体。MVC设计模式的优点是,它使得Model、View和Controller各个部分之间相对独立。Struts在一个中心位置装配ActionServlet、ActionMapping和各种Action类,处理所有传入的HttpServletRequest。ActionServlet把各个传入的HttpServletRequest分发给Action类,而ActionMapping对象可通过Struts-config.xml配置文件控制,它告诉ActionServlet如何分发请求。

图一:Struts各个部分之间的通信过程

  图一阐述了Controller的功能:在客户端、View和Model之间起协调、仲裁的作用。只有Controller才会与Model和View联系,在这中间它就象是一个交换机,而Model和View之间不会直接通信,这样,Model、View和Controller就被分隔开来。这是成功运用Struts的关键所在。

  说明一下:所有Controller的逻辑应当放入Action类,与应用的其他层的通信可以在这里进行。虽然我们可以把业务逻辑也放入Controller,但一般而言最好不要这么做。应当改用Model部分的组件,因为这些组件才是真正处理数据的地方。把数据保存到数据库也应当是Model的功能之一。

  当Controller处理好一个HttpServletRequest,它把请求转发给View。View的唯一任务是表现数据,在Struts中,View一般使用JSP技术。

  在Struts中,Controller和View之间的所有通信都通过HttpServletRequest、HttpSession和ServletContext间接完成,对于这些操作来说,首选的技术莫过于Servlet,Struts直接把HttpServletRequest传递给Servlet——或者是JSP,不过Servlet容器会自动把JSP转换成Servlet。

  二、Struts和JSP的局限

  作为一个开放的框架,Struts允许使用JSP之外的技术构造View。在考虑改进Struts应用中的View技术时,人们首先想到的往往是用其他Servlet技术替代JSP,例如用XSLT或在Servlet管理之下的XSLT。

  图二描述了在Struts框架中应用JSP的情况。View由JSP定制标记库和JSP页面共同构造,其中ActionForm类是一种类似JavaBean的ValueObject对象,带有set和get方法,用来保存客户的状态。按照Struts的MVC概念,ActionForm位于View和Controller之间的中间地带。Struts提供了一组完备的专用标记,用来从JSP访问ActionForm里面的数据。

图二:Struts应用体系

  JSP有力地推动了Java在Web开发中的应用。在JSP标记库技术的帮助下,JSP为Web和J2EE应用中的表现层开发提供了丰富和强大的工具。但是,JSP也存在一些局限:

  ·程序员可以把应用逻辑放入JSP。但是,按照MVC的设计思想,JSP的唯一用途是显示出数据,否则,程序结构很容易变得复杂和难于管理。

  ·JSP对XML的支持不佳。JSP不能保证输出的XML内容100%“格式良好”(Well-Formed)。在这个无数支持XML的Internet访问设备不断涌现的时代,缺乏对XML的支持无疑不是小问题。

  ·开发过程中每一次修改JSP都会导致Servlet容器重新把JSP转换成Servlet。对于有些Servlet引擎,开发过程中由此引起的延迟带来很多麻烦。

  三、XSLT的优势

  作为一种W3C的正式标准,XSLT提供了一种把XML数据转换成纯文本、PDF、HTML/XHTML、WML、VoiceXML等任意XML格式的灵活、强大的工具。XSLT处理器,例如Xalan和Saxon,通过XSL样式执行转换,XSL样式本身实际上也是一种XML文档(参见图三)。

  XSL样式定义了转换XML数据的规则,XSLT处理器按照这些规则实施转换。在XSL样式中,我们可以利用XPath表达式以一种紧凑而高效的形式选取XML文档的一部分进行处理。

图三:XSLT转换原理

  XSLT/XPath的基本理念是分离XML数据内容和它的表现形式,以便把同一份数据方便地以不同的形式(或格式)输出,满足各种不同显示设备的需要。也就是说,在不改动输入的XML文档的条件下,对于每一种不同的输出格式,只需定义相应的XSL样式。对于Struts应用来说,这意味着:

  ·在单一XML文档中存储(描述)所有的数据。

  ·在XSL样式的帮助下,把该XML文档转换成任意数据格式。

  当然,XML文档可以在内存中生成,不一定要有保存在磁盘上的文件。例如,以Java对象的形式创建XML文档,然后直接用XSLT处理器加以处理,从而极大地提高处理速度。

  四、StrutsCX:加上了XSLT的Struts

  StrutsCX把Struts和XSLT的优势结合到了一起,它用XSLT来替换生成View的JSP,但原封不动地保留Struts的Controller和Model部分。

  图四比较了Struts和StrutsCX的差异。在View中,StrutsCX传递的目标不再是JSP,而是一个Servlet,由Servlet组织、构造XML文档,并利用XSL样式转换XML文档。如果有ActionForm Bean,Action对象把它复制到HttpServletRequest,然后也被加入到XML输出文档。类似于Struts,StrutsCX动作的功能也是协调Web应用或J2EE应用的表现层和其他各个层,例如业务层等。


图四:StrutsCX应用体系

  StrutsCX与Struts的不同表现在下面几个方面:

  ·在View中,StrutsCX使用的是XSLT而不是JSP。

  ·应用的国际化不再通过Java资源捆绑技术实现,而是通过纯XML技术实现。

  ·StrutsCX不需要为了输出错误信息而使用任何标记库,它使用XML和XSLT/XPath之类的W3C标准技术。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JDBC编程基础 第二部分

下一篇:用Web Services开发一个决策支持系统