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

Web显示层技术评估 -- 1. 名词界定 2. 理论模型, 3. 数据寻址

 
阅读更多

Web显示层技术评估

名词界定

显示层的意思就是Presentation Layer,也翻译成表现层、展现层、展示层。

本文讨论的范围只包括采用HTML Template的显示层技术,不包括EchoGWT(google web toolkit)等根据代码产生HTML的工具。

本文主要讨论Server Side (针对Java Language)的显示层技术,然后进一步讨论Browser SideAjax)的显示层技术(一个典型的Ajax应用也分为Model, View, Controller – Data, HTML/CSS, JavaScript)。注意,本文关于Ajax的讨论只有很少一部分,因为我不擅长这个领域。只是一个顺便的扩展比较。

一个很有趣的现象。Server SideBrowser Side的显示层技术格局恰好相反。Server SideScripted Template技术比较多,比较流行;而Browser SideHTML DOM Manipulation技术、HTML View Model技术比较多,比较流行。

本文会提到一些技术、或者框架的名称,但只局限于讨论该技术、该框架的显示相关部分的内容,而不涉及评估其他方面的特性。比如,本文不讨论Link URL Generation, Action URL GenerationButton Script Generation这些页面组件事件机制的方面。

本文是一个深度讨论。不讨论简单的替换个字符串的Hello World案例,而是穷尽各种显示层技术的能力极限,探索它们在复杂布局(动态include等)、复杂显示逻辑(条件、循环、嵌套、递归)等方面的功能。

对了,(考虑到Site MeshStruts Tiles Taglib等技术广泛的群众基础),可能需要专门提一下,本文将不讨论Site MeshTiles等布局技术(named include)。

Site Mesh相当于XSL的一个简化版本,只保留了根据(name->file)配置替换某个HTML Node的能力,其余的如Tiles,也大致如此,由于多了一个(name->file)配置文件,比直接include file高级了不少。

由于使用简单(功能自然也简单),这类技术获得了广大群众的支持,呼声很高。本文为忽略了这一类技术感到很遗憾。

另外需要指出的是,并不存在一个十全十美的方案。

工作总是要做的,不是在Template里面做,就是在Java Code里面做,总之,总要找个地方做这个工作,天下没有免费的午餐。一方面特性增强了,自然影响到另一方面。

正如,代码的耦合实际上并不能完全消除,我们只能把这些耦合点移动来移动去,今天我看这里不舒服了,把耦合点移动到另一个地方;明天另一个人看到那里不舒服了,又移动回来。而且各自都能说出一大堆道理。

所以,需要注意的是,并不存在一个绝对的优胜方案。本文只是列出各种技术指标的参考评估数据,以便帮助读者根据自己的需要,做出比较准确的评估。(是的,准确的量化评估,而不是广告语或者口号)

理论模型

一个显示的整个过程,如果用一个函数来描述,那么看起来大概是这样。

F(Data, Template, Display Logic) => Result HTML

其中的Display Logic,就是显示逻辑。Display Logic操作DataTemplate,产生最终结果。

这个Display Logic可能以各种形式出现在任何地点。

比如,可能作为Server Side Script存在于Template里面,把Data取出来输出;也可能存在于后台Java里面,根据Data操作Template Node

针对前一种情况,函数公式表达是:Template Script (Data) => Result

针对后一种情况,函数公式表达是:Logic (Data, Template) => Result

这个模型可以作为显示层技术的划分标准。

(1) Scripted Template

HTMLServer Side Script混杂在一起的显示层技术。

包括JSP, Velocity, Freemarker, Taglib, Tapestry, XSL等。

肯定有人对这个划分有异议。XSL里面有choose, if, for。这还好说。尤其是对Taglib, Tapestry,反映可能更加强烈。我似乎已经看到,Taglib or Tapestry Fans已经跳起来了,高叫着,Taglib or Tapestry明明是组件技术,组件技术,组件技术….

这里我还是表示很遗憾。在目前定义的这个狭义模型下,任何Template中包含Logic的显示技术都划为Script这一类。而且在表示逻辑的时候,这类组件技术表现的更加突出一些。

比如Tapestry<foreach> <if><if-not> <let><set> 等逻辑标签。尤其是这个if not,是专门多出来的一个条件语句,一般的编程语言里面都不具备这样的对应语法。当然,Tapestry并不专美,TaglibLogic Tag也是如此。

(2)Template Manipulation

Java代码直接操作Template(比如,HTML DOM)产生结果的显示层技术。

包括XMLC, JDynamiTe, Rife等。

大家对这一类技术可能不是很熟悉。后面进行特性分析的时候,会举出一些典型的例子,来说明各自的用法。

一个很有意思的现象是,在Browser SideAjax),由于Java Script操作HTML DOM非常方便,这类显示技术非常普遍。相反的,Scripted Template的技术,在Browser Side却不多见。后面讨论Browser side的时候,会列举一些典型的例子。

(3) Model Match

Java代码负责提供符合显示层要求的Data Model,显示层框架本身把Data ModelTemplate进行匹配,产生结果。

包括Wicket, Fastm, DOMPlus, 等。

Wicket如同Swing的用法,需要为不同的UI Component提供不同的View Model,比如Table, List, Label等。Fastm, DOMPlus支持POJO,但同样需要满足一些框架特有的约定。

也许有人会说,某些Display Tag Lib, Tapestry Components可能也需要Java Code提供特殊的View Data Model

不过,需要特殊的View Data Model,并不是一个好的特性,意味着不支持POJO

数据寻址

在正式开始之前,先说明一下数据寻址的概念。

数据寻址,意思是数据访问、属性获取等。主要包括两类风格。

(1) OGNL Style

http://www.ognl.org/

OGNL (Object Graph Navigation Language)如此著名和深入人心,以至于我在这里用OGNL Style代表Java Bean属性寻址的方式。

比如,a.b[1].c.d[2].name

另一类当然是

(2)XPath Style

比如,a/b[1]/c/[d]/@name

XPath Style主要应用在XSL中。

一个JXPath项目能够按照XPath的方式访问Java Bean属性。

http://jakarta.apache.org/commons/jxpath/

简单的寻址,OGNLXPath能够对应起来。但是,OGNLXPath都各自是功能很强大的语言,复杂的用法并不能对应。

分享到:
评论

相关推荐

    en_core_web_sm-2.2.0.tar.gz

    en_core_web_sm是Spacy预训练模型之一,其中“en”代表英文,“core”表示核心功能集合,“web”暗示该模型是基于网络数据训练的,而“sm”则表示这是小规模版本,相对于更大的“md”(中型)和“lg”(大型)模型,...

    PyPI 官网下载 | textblob-nl-0.0.1.tar.gz

    2. **词性标注**:库内包含了荷兰语的词性标注模型,可以自动识别荷兰语单词的词性,这对于理解和处理荷兰语文本的语法结构至关重要。 3. **名词短语提取**:textblob-nl还提供了名词短语提取的功能,这在信息抽取...

    en-core-web-sm-2.3.0.tar.gz

    预训练模型是指在大量数据上预先训练好的模型,可以直接用于处理新的文本,减少了用户从零开始训练模型的时间和计算资源。"en"表示这个模型是针对英语(English)的,"core"指的是基础模型,"web"意味着该模型是在...

    zh_core_web_md-2.3.1.tar.gz

    "zh_core_web_md"这部分表示这是针对中文(zh)的“核心网页中型”(core web medium)模型,旨在平衡模型的性能和内存占用,适合处理网页文本和其他中等规模的数据集。 Spacy的模型通常分为不同的大小,以适应不同...

    en-core-web-sm-3.3.0.tar.gz

    《Spcay模型在中文与英文处理中的应用与实践》 在现代自然语言处理(NLP)领域,Spcay模型因其高效、精准的特性,成为处理文本数据的重要工具。"en-core-web-sm-3.3.0.tar.gz"这个压缩包就是Spcay模型的一个具体...

    Python库 | HanLib-1.5.1-py3-none-any.whl

    《Python库HanLib-1.5.1-py3-none-any.whl详解》 Python作为一门强大且广泛应用的编程语言,拥有丰富的第三方库资源,这些库极大地扩展了Python的功能,提高了开发效率。其中,HanLib是一款针对中文处理的Python库...

    en_core_web_sm-3.1.0.tar.gz

    在压缩包内的 "en_core_web_sm-3.1.0" 文件,可能包含了模型的权重、词汇表、规则和其他必要的数据结构。这个版本号 "3.1.0" 暗示这是一个更新迭代的版本,相比之前的版本可能有性能优化、新功能添加或错误修复。 ...

    zh_core_web_sm-2.0.3.tar.gz

    《Spacy 中文包:zh_core_web_sm-2.0.3》 在自然语言处理(NLP)领域,Spacy 是一个广受欢迎的库,它提供了高效且易用的工具,用于处理文本数据。然而,原生的 Spacy 库主要支持英文,对于中文处理存在局限。因此,...

    eclipse中文包BabelLanguagePack-eclipse-zh_4.22.0.zip

    可将eclipse设置成中文模式,设置后重启即可生效,具体如何设置查看我的“Java Web 程序设计期末复习总结”文章。基于原本意思,无法做到百分百翻译,一些特有名词无法翻译,但对萌新来说已经足够了。

    opennlp-tools-1.3.0.gz_OpenN_OpenNLP 1.3.0_opennlp-too_opennlp.t

    1. **分词(Tokenization)**:这是处理文本的第一步,OpenNLP提供了高效的分词模型,能够将连续的文本分割成有意义的词汇单元。 2. **词性标注(POS Tagging)**:它能够自动识别文本中每个词的词性,如名词、动词...

    Python库 | pug-nlp-0.1.14.tar.gz

    3. **命名实体识别(Named Entity Recognition)**:pug-nlp可以识别文本中的人名、地名、组织名等专有名词,这是信息抽取和情感分析的重要步骤。 4. **语义角色标注(Semantic Role Labeling)**:这个功能能够...

    电大---行政管理本科--名词解释排序.doc

    电大---行政管理本科--名词解释排序.doc

    PyPI 官网下载 | keras-pos-embd-0.10.0.tar.gz

    3. **集成到Keras模型**:库提供了与Keras模型无缝对接的功能,使得用户可以在构建神经网络时轻松地引入词性嵌入层。 4. **API接口**:库应该提供了易于使用的API,使得开发者能够快速地在自己的项目中集成词性嵌入...

    webcontrol

    5. **数据绑定**:WebControl支持数据绑定,可以直接从数据源获取并显示数据。 6. **样式和皮肤**:通过CSS样式和皮肤文件,可以统一和定制WebControl的外观。 在"WebControlDemo"项目中,我们可能会看到如何创建...

    中考英语语法精讲例析---名词.doc

    中考英语语法精讲例析---名词.doc

    PyPI 官网下载 | harvesttext-0.7.4.1-py3-none-any.whl

    Python编程语言因其简洁明了的语法和强大的社区支持,成为数据处理、科学计算和Web开发等领域的重要工具。PyPI(Python Package Index)是Python软件包的官方仓库,它为开发者提供了一个集中发布和下载Python库的...

    Python库 | lab_text_processing-0.2.0-py2.py3-none-any.whl

    "lab_text_processing-0.2.0-py2.py3-none-any.whl" 是一个针对Python语言的文本处理库,它的全名表明它是一个Python 2和Python 3兼容的版本(py2.py3),并且适用于任何架构(none-any)。 "lab_text_processing" ...

    网络安全--名词解释.pdf

    网络安全--名词解释.pdf

    Python库 | textar-0.0.4-py2.py3-none-any.whl

    **Python库textar-0.0.4-py2.py3-none-any.whl详解** `textar` 是一个Python库,主要用于处理文本相关的任务。在Python的生态系统中,库(Library)是开发者共享代码和功能的模块化工具,极大地提高了编程效率。这...

    初三英语语法-.名词专项.doc

    【名词专项】是初中英语语法中的重要组成部分,主要涉及名词的分类、可数名词的单复数变化规则以及一些特殊用法。以下是详细讲解: **名词的分类:** 名词大致可以分为四类: 1. **个体名词**:指具体的人或物体,...

Global site tag (gtag.js) - Google Analytics