标签:webx框架
Webx3_Guide_Book中是这样介绍的:
Webx是一套基于Java Servlet API的通用Web框架。Webx致力于提供一套极具扩展性的机制,来满足Web应用不断变化和发展的需求。而SpringExt正是这种扩展性的基石。SpringExt扩展了Spring,在Spring的基础上提供了一种扩展功能的新方法。
这也说明,webx是在springExt的基础上建立起来的一套web服务框架。
它封装了servlet规则,细化了一般情况下的filter,通过配置文件pipeline.xml和强化过的RequestContexts,将一个请求的路径和处理过程展现。有关这两个是什么和它们的使用方法后面再说。
该框架不但定义了请求分发机制,更对前端的页面展示层进行模板式的定义:使用default.vm、index.vm、register.vm等类型的自定义模板与analyzeURL机制进行交互,形成从前端到后台的“整体一条龙”的流程。
在Webx中,约定胜于配置。规则较多,但我相信理解之后便能够自由运用(我们学习任何东西都要先了解它的规则,这是必然的一步)。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
$spring-version
可在标签中可通过<spring-version></spring-version>
配置。
<dependency>
<groupId>com.alibaba.citrus</groupId>
<artifactId>citrus-webx-all</artifactId>
<version>${webx-version}</version>
</dependency>
通过pipeline的analysisURL模块解析出target之后,会根据pipline-velves制定的规则分发。
这时,需要知道什么样的target会对应到什么样的流程中去,这个对应过程的识别,是根据包名的约定来定义的。也即是约定大于配置的一个体现。
对于包名的配置项在webx.xml和webx-*.xml中定义。
<!-- 装载模块。 -->
<services:module-loader>
<ml-factories:class-modules>
<search-packages type="$1"
packages="todolist.module.*" />
</ml-factories:class-modules>
</services:module-loader>
packages所指的就是用于匹配对应规则的包,$1直接匹配到screen.xxx.java或action.xxx.java等等。
而在pipeline.xml中制定映射规则包括:
<pl-valves:performAction />
performAction:在webx中主要是用来处理提交的表单,将表单类传给java类,执行相应的处理方法,然后返回或者重定向。
<pl-valves:performTemplateScreen />
performTemplateScreen:将target映射成module包下的screen.xxx类。
详见附件的第四章WebxTurbine。
<pl-valves:renderTemplate />
rendertemplate:将target映射到webroot下的各个模板上。
注:这是映射的不是类,而是模板了,也就是带着数据等开始渲染模板。
详见第四章WebxTurbine。
这里可能会有一个误区,根据我的使用历程,发现performAction、performtemplateScreen和renderTemplate这三个基本方法,凡是perform开头的都是映射到java类的。我开始的时候会认为performTemplateScreen是直接映射到app/templates/screen中的模板去,后来才发现这个问题。
只有render相关的才是渲染模板,一般使用renderTemplate的应该是执行完perform*之后或者是首页——直接渲染模板。
Pipeline不仅可以控制流程的中断或继续,还可以实现子流程、循环、条件转移、异常处理等更精细的流程控制。Pipeline服务甚至可以运用在非WEB的环境中。
上述包名规则的定制就是为了pipeline服务中使用perform*和 renderTemplate等等去使用的。
正如上述所说,在renderTemplate的时候就需要用到模板的规范了,他可以使得类中处理得到的数据和模板对应起来。
模板目录有这几个要素:
webroot下以应用名为子目录(如app)
其中重点讲app下模板,common的与app大体一致。
screen下可以自定义目录,该自定义目录在使用外部重定向的时候需要跟设置的setTarget()相符。
如:screen/form/register.vm
则nav.redirectedTo(“appLink”).setTarget(“form/register”)即锁定到了该register.vm。
在renderTemplate时,先渲染screen中的内容,然后出来寻找layout,最终将组装好的整个页面呈现。
详见附件第四章WebTurbine——renderTemplate。
上述几项已经基本将pipeline.xml的主要部分做了说明。
下面看一些固有的配置项和自定义(app)配置项。
WEB-INF下
WEB-INF/common下
WEB-INF/app下
- form.xml
下一节的主要任务是弄清楚这些配置和之间的关系。
附:
之前讲到了pipeline和requestContext将传统的filter细分为两个比较独立的职能,下面是对webx中requestContext的简单介绍。
RequestContexts则负责访问和修改request和response,但不负责改变requese的执行流程。
RequestContexts服务中的每一个环节的RequestContext之间并非完全独立、互不干涉的。每个request context可以访问它所依赖的其它request context中的状态。
详见附件第六章——Filter、Request Contexts和Pipeline。
标签:webx框架
原文地址:http://blog.csdn.net/langduhualangdu/article/details/46334037