XML在B/S架构开发中的应用

xml|架构

传统上, 我们利用JSP+Bean来开发用户界面, 这里介绍一种利用XML+XSLT的方法来替代JSP

  动机:

  1. JSP构造页面太痛苦. 代码嵌入页面导致页面臃肿, 逻辑复杂, 不易编辑.
  2. 程序员和美工的接口必须精确定义. 复杂的嵌套输出必须构造复杂的显示类作为接口.
  3. 调试JSP必须等到前端程序结束才能看到效果.
  4. 调试JSP效率极低, 一点点小的修改都会引起jsp的重新编译.   新的XML的解决方案:

  1. 一个servlet做统一管理. 接受url请求, 映射到对应的程序bean.
  2. 程序bean只产生XML, 由servlet统一用对应的XSL转换为html.

  好处:

  1. JDK1.4已经自带XML API和XSLT, 并且支持XSLT 1.0标准. IE6也支持同样标准.
  2. 开发前先制作接口用的demo XML, 程序员的输出必须符合此格式. 美工根据此格式制作XSL. 接口可视化, 明确定义.
  3. 只要定义好接口XML, 两边几乎不需要再联合调试. 美工利用接口XML和IE6就可以直接看到效果.
  4. 程序员只要保证输出的XML的是否符合接口, 直观的做文字性对比.
  5. 大量页面可重用的部分能方便的抽象出来, 在XSL文件中include/import进来. 高度重用, 标准化.
  6. 写XSL可大量采用template, 结构清晰, 修改方便, 写页面变成搭积木, 不再有jsp的层层嵌套.
  7. 对于不同的终端设备, 可以定制不同的XSL, 很方便的就能够支持手机, pda...
  8. 在程序中利用支持XML的工具, 比如sql2000, 可以直接生成XML结果, 无需复杂编程.

  坏处:

  1. 因为要进行XSLT转换, 服务器工作量稍微增大.  以下是几个关键环节的简单示例:==============servlet中的XML转换==========
/**
* XML是String
* XSL从文件中读取
* 直接写入response
*/
//import javax.xml.transform.*;
//import javax.xml.transform.stream.*;StreamSource xml = new StreamSource(new StringReader(xmlSource));
StreamSource xsl = new StreamSource(xslFileName);response.setContentType("text/html; charset=UTF-8");
StreamResult result = new StreamResult(response.getWriter());Transformer trans = TransformerFactory.newInstance().newTransformer(xsl);
trans.setOutputProperty("encoding","UTF-8");
trans.transform(xml, result);==================接口XML文件样本=============
<?xml version="1.0" encoding="UTF-8"?>
<?xml:stylesheet type="text/xsl" href="xxx.xsl"?>
<PAGE>
<OUTPUT>
<INFO>推广UNICODE, 解决多语言问题.</INFO>
</OUTPUT>
</PAGE>==================XSL文件样本=============
<?xml version="1.0" encoding="UTF-8"?>
<?xml:namespace prefix = xsl /><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">

<P align=center>
<xsl:value-of select="page/output/info"></xsl:value-of></xsl:template>
</xsl:stylesheet>   考虑:

  1. 可以把XSLT转换放在IE进行, IE6以下版本要安装MSXML3, 对客户端限制太多.
  2. 在客户端的XSLT转换必须完全读入XML+XSL, 在网速不高或者内容很多的时候反应相当迟钝.
  3. 手机, pda等设备不能进行XSLT转换, 所以XSLT转换还是放在服务器上比较合适.
  4. 因为一般提交内容都比较简单, 所以没有采用XML处理, 在程序中也尽量少用XML, 避免影响速度.
  5. 可以在servlet判断特定参数, 比如发现有xml-view参数时, 不做XSLT转换, 直接输出XML到浏览器, 供程序调试用.  说明:

  1. 这里只是利用XSLT的功能来解决网站建设中最头痛的界面和逻辑分开问题, 不是基于XML的内容处理.
  2. 如果你想赶时髦, 用XML来全副武装, 可以参考cocoon2, http://xml.apache.org/cocoon/. 但是请记住, cocoon   还不完善, 你将碰到乱码, 速度, 文档不足的问题, 但是它的思想的确值得学习.
  3. 在tomcat, resin中有用filter实现的xslt转换,可参考。

时间: 2024-10-03 20:33:55

XML在B/S架构开发中的应用的相关文章

XML在BS架构开发中的应用

动机: 1. JSP构造页面太痛苦. 代码嵌入页面导致页面臃肿, 逻辑复杂, 不易编 辑. 2. 程序员和美工的接口必须精确定义. 复杂的嵌套输出必须构造复杂的显示 类作为接口. 3. 调试JSP必须等到前端程序结束才能看到效果. 3. 调试JSP效率极低, 一点点小的修改都会引起jsp的重新编译. 新的XML的解决方案: 1. 一个servlet做统一管理. 接受url请求, 映射到对应的程序bean. 2. 程序bean只产生XML, 由servlet统一用对应的XSL转换为html. 好处

应用-安卓开发中,AndriodManifest.xml中的manifest的标签中的内容放在哪里?

问题描述 安卓开发中,AndriodManifest.xml中的manifest的标签中的内容放在哪里? 就是说,我用eclipse创建了一个安卓应用程序. 若我要修改标签的android:name,书上写"可通过这样来设置Activity 对象的类名称,但类的路径必须是标签中的包路径所指定的路径范围".然后 我找到了标签,其中有一句"package =com.example.test1"(我这个安卓应用程序 的名字是test1,那么怎么查看其所指定的范围? 另外又

iOS 开发中的 Flux 架构模式

本文讲的是iOS 开发中的 Flux 架构模式, 在半年前,我开始在 PlanGrid iOS 应用程序中采用 Flux 架构(开发).这篇文章将会讨论我们从传统的 MVC 转换到Flux的动机,同时分享我们目前积累到的经验. 我尝试通过讨论代码来描述我们大部分的 Flux 实现, 它用于我们今天的产品中. 如果你只对综合结果感兴趣, 请跳过这篇文章的中间部分. 为什么从 MVC 转移 为了引入我们的决定, 我想要先谈一谈 PlanGrid 这个应用遇到的一些挑战.一些问题仅针对企业级应用程序,

android id-android开发中XML Id设置问题

问题描述 android开发中XML Id设置问题 在xml文件中,设置控件ID 时android:id="@+id/tabs"和 android:id="@android:id/tabs"的区别是什么..??? 解决方案 @+id 新增一个资源id @id和android:id,引用现有的资源id

eclipse rcp-eclipse RCP开发中如何在Activator中获取plugin.xml中配置的action

问题描述 eclipse RCP开发中如何在Activator中获取plugin.xml中配置的action action是在extensions里重写eclipse提供的标准扩展点:org.eclipse.ui.actionSets.想在Activator中获取此action对象并调用setEnable()方法,达到控制按钮的可用和禁用状态.望各位大神帮忙! 解决方案 目前我也不会,但是需要积分

布局-在安卓开发中,如何在一个Activity中引用另一个Activity的XML文件?

问题描述 在安卓开发中,如何在一个Activity中引用另一个Activity的XML文件? 如题,我想在Activity1中通过点击Button来显示Activity2中的布局,要如何做到?求高手帮忙,谢谢大家 解决方案 在Android中常通过Intent进行Activity间的跳转.数据传递等,可在Button的onClick事件中通过Intent启动Activity2. 通过Intent进行Activity跳转,如下: Intent intent = new Intent(this, A

Android开发中的MVP架构

最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和学习各种文章以及专题讨论所总结出来的,它包括以下几点: 为什么越来越多的人开始关注架构? 首先,MVP是什么? 哪种架构才是最好的,MVC,MVVM还是MVP? MVP的利与弊 Show me the code!!!代码展示 不幸的,这篇文章将不包括: 详细生动的代码示例 如何编写测试代码 最后,我将告诉你如何更进一步学习这些专题.

安卓开发中粘贴进项目里的xml文件的R.id里的属性报错怎么解决啊?新手,求助。。

问题描述 安卓开发中粘贴进项目里的xml文件的R.id里的属性报错怎么解决啊?新手,求助.. mContent = (EditText) findViewById(R.id.et_note_content);像这样的代码,R.java中能找到et_note_ content但就是报错,et_note_content cannot be resolved or is not a field.怎么解决啊,新手求助 解决方案 注意一下引入的R是不是你工程的R,看一下import

iOS开发中常见的解析XML的类库以及简要安装方法_IOS

在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.TinyXML和GDataXML.问题是应该选择哪一个呢? 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值.而且通常情况下,可以借助XPath,直接查询XML节点. SAX