Webx MVC分析

Webx框架:

petstore:webx3/webx-sample/petstore/tags/3.0/petstore

编译之后:mvn jetty:run即可, 访问::8081/

Webx MVC(以webx3为基础)

1、webx3的入口点

webx.xml:每个webx应用,香港空间,都需要有一个webx.xml配置文件。这个文件定义了Webx所用到的所有services的配置。

pipeline.xml:即管道,它是由一个或多个“阀门Valve”构成的。可以看做webx框架的总控文件。

log4j.xml:日志系统配置文件。对于程序的排错至关重要。

典型的webx.xml配置:

2、前端分析

所有和前台展示有关的文件,即模板,放在templates目录下,vm后缀的为Velocity的模板

对应的java代码

src/main/java/…/module。

Modules是基本编程模块:包括screen,control,action

Screen — 用来处理页面显示逻辑的module,主要功能就是显示一个页面

Control — 和screen类似,但可以被别的screen或layout引用,甚至可以跨越car应用

Action — 处理用户提交表单的module

Webx的页面布局以screen为主导,通过screen来查找其余的页面元素,然后通过一系列查找规则来查找页面元素Screen和control都可以有java类来驱动,但不是必须的,也就是说可以先写模板,后写类 ,也可以只写模板,不用构造对应类。

页面布局如下:

• Screen,代表页面的主体。

• Layout,代表页面的布局。

• Control,代表嵌在screen和layout中的页面片段。3、Webx执行的流程

可参考:?p=7830,?p=7604

用户输入URL::7001/petstore/user/login.htm

1)petstore称为Context Path。服务器把这个请求交给petstore应用来接管。

2) login.htm称为Servlet Path。在web.xml中把*.htm映射到Webx Controller Servlet,所以Webx Controller Servlet就接管了这个请求。

3) Webx Controller Servlet激活pipeline,继而调用AnalyzeURLValve来分析/ login.htm是什么意思。根据webx默认的映射规则,/ login.htm被转换成/ login.vm。

:/login.vm

模板:/screen/login.vm

模块的类:com.alibaba.sample.petstore.web.user.module.screen.Login(找不到该类)com.alibaba.sample.petstore.web.user.module.screen.Default(找不到该类)

模板:/layout/login.vm(找不到)/layout/default.vm(找到)

4、配置文件分析

参考:?p=12800

(1)Webx2 PoolToll

在velocity模板中经常使用到pulltool,这是一些工具类,方便我们进行页面输出内容的控制,组织页面的展示,或者是直接取得web层相关的 一些对象,直接在vm中调用。pull在概念上可以形象的理解为"拉动",是由页面拉动业务逻辑,获取并控制需要展示的内容,而非应用程序推动 (push),这非常符合webx的页面驱动的模式。在页面进行渲染时,pulltool对象已被预先创建好,并被放入TemplateContext 中,在渲染页面时被调用并输出所需要的内容。 pulltool是由PullService管理的,PullService将pulltool纳入了Service框架的范畴进行管理,理论上我们可以 将任意组件封装为一个pulltool,或者将任意代码逻辑封装在一个pulltool中,只要实现PullTool接口,这个类便可以被 PullService管理起来进而可以在vm模板中直接使用,或者说,pulltool就是一些被PullService管理的组件,这些组件帮助我们控制页面上的内容。pulltool一般都会继承一个抽象类PullToolSupport,这个类方便对PullTool进行配置与调用,它包含了一些 与PullTool的配置与初始化有关的逻辑,它的子类只需要专注于自己需要对外提供的方法即可。而PullService提供了一个自动组装 TemplateContext的机制,通过这个机制,PullTool被put进TemplateContext,可以在模板中被直接使用。 PullTool 有四种不同的作用范围,

Authorized – 验证用户作用域,此作用域内的tool在用户被验证之后创建,随用户的登出而消失 不同的作用域范围代表了pulltool的生效范围,global作用域的PullTool被放入一个全局的TemplateContext中(这个 Template的上下文只在PullService被初始化的时候被创建,只被创建这一次,作为全局的TemplateContext来使用),其他作 用域的PullTool都是在用户请求之后创建的TemplateContext中有效,而每一个显示组件,如screens和controls,都将继 承上述作用域中的tools,但不会相互覆盖,即依旧在各自的作用域中生效。当screen等显示组件所对应的模板被渲染时,调用pulltool的地方 就能够被调用了。PullTool在Webx.xml文件中进行配置,将需要使用的pulltool作为PullService的property,它们会作为PullService的Configuration被读取。以下是一般项目中常用到的一些pulltool的配置 全局作用域的pulltool$util,实现类是LangToolSet,它是一个pulltool的集合,包含了com.alibaba.lang包下的一系列基本工具类,如StreamUtil,StringEscapeUtil,StringUtil,ArrayUtil等,这些工具在vm模板里可利用对应的变量名称调用,由于pulltool主要用来控制页面显示内容的,最常用的要数StringEscapeUtil,美国空间,StringUtil。StringUtil包含对字符串的处理函数,似乎跟字符串判断与字符串比较有关的功能这里都有了,在vm里通过$stringUtil变量调用需要的方法就可以啦。StringEscapeUtil,这个类的用途更大,它可以方便的将字符串转换成适应Java、JavaScript、HTML、XML、SQL、URL语句的形式,当然,在模板里调用,对于HTML、JavaScript及URL的转义肯定是最常见的了。$viewTool,实现类是IntlViewPullTool,包含了很多国际站页面输出时常用的方法,方便国际站工程师在页面上直接调用,避免重复开发,节省工作量。包括的方法有以下几类输出值格式化,如formatDate(),formatInt(),getAdjustedString(),截取输出值的一部分显示,还有控制html转义与输出的一些方法。业务逻辑相关的格式化,虚拟主机,getCountryTimeZone(),encryptForAlitalk()等,为了解决一些常见的展示需求,在页面直接使用,方便快捷。一些很通用的页面输出的控制逻辑,都可以抽取出来作为pulltool工具来使用,提高开发效率。request作用域的pulltool,在用户提交请求时创建,可以用来直接在vm中使用请求相关的一些对象

(2)Webx3 pooltool

pullTool的配置

去陌生的街角,去做一切我们曾经或现在也很想做的事情,

Webx MVC分析

相关文章:

你感兴趣的文章:

标签云: