Webx学习(一)
什么是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中。约定胜于配置。规则较多,但我相信理解之后便能够自由运用(我们学习不论什么东西都要先了解它的规则。这是必定的一步)。
Webx的必备组件
- spring核心框架
- webx框架依赖(com.alibaba.citrus)当中包括了重要的WebxContextLoaderListener和LogConfiguratorListener
- pipeline及映射规范
- 模板规范
- 配置项
spring核心框架
<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>配置。
webx框架依赖
<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不仅能够控制流程的中断或继续。还能够实现子流程、循环、条件转移、异常处理等更精细的流程控制。Pipeline服务甚至能够运用在非WEB的环境中。
上述包名规则的定制就是为了pipeline服务中使用perform*和 renderTemplate等等去使用的。
模板规范
正如上述所说,在renderTemplate的时候就须要用到模板的规范了,他能够使得类中处理得到的数据和模板相应起来。
模板文件夹有这几个要素:
webroot下以应用名为子文件夹(如app)
- webroot/common
- webroot/app
- webroot/WEB-INF
当中重点讲app下模板,common的与app大体一致。
- app/templates/layout
- app/templates/screen
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.xml
- webx.xml
- webx-*.xml
- logback.xml
WEB-INF/common下
- pipeline.xml
- pipeline-execption.xml
- resource.xml
- uris.xml
- webx-component.xml
- webx-component-and-root.xml
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学习(一)的更多相关文章
- webx学习笔记
Webx学习笔记周建旭 2014-08-01 Webx工作流程 图 3.2. Webx Framework如何响应请求 当Webx Framework接收到一个来自WEB的请求以后,实际上它主要做了两 ...
- webx学习
webx框架学习指南 http://openwebx.org/docs/Webx3_Guide_Book.html webx学习(一)——初识webx webx学习(二)——Webx Framewor ...
- webx学习1
webx的配置 如果想在web项目中使用webx框架,需要在web-inf/web.xml文件中进行相关的配置. 1.初始化spring容器 初始化spring容器- /web-inf/web.xml ...
- Java新人学习(li)
一.项目中搭配使用SVN和Git 安装SVN:安装熟悉Git:安装maven,修改setting.xml文件:安装eclipse,配置jdk.maven路径: 建立自己的Git仓库,熟悉常用的Git命 ...
- webx--petstore
配置对应环境,运行petstore 通过官网给的命令行方法,来运行petstore petstore是java ee的经典学习案例,下载链接 如何运行呢? 参见官网给的指导:webx官网 git cl ...
- 我的WebX框架学习总结与心得分享
最近学习了webx框架, 利用博客园跟大家分享一下自己的学习心得; 周建旭 2014-08-21 网上关于webx的资料少的可怜, 怎么办? 这种情况下不用去求助别人求人只会耽误时间, 不用畏惧; ...
- WebX框架学习笔记之一
Webx是什么? Webx是一套基于Java Servlet API的通用Web框架.它在Alibaba集团内部被广泛使用.从2010年底,向社会开放源码. Webx的发展历史 2001年,阿里巴巴内 ...
- WebX框架学习笔记之二----框架搭建及请求的发起和处理
框架搭建 执行环境:windows.maven 执行步骤: 1.新建一个目录,例如:D:\workspace.注意在盘符目录下是无法执行成功的. 2.执行如下命令: mvn archetype:gen ...
- BigPipe学习研究
BigPipe学习研究 from: http://www.searchtb.com/2011/04/an-introduction-to-bigpipe.html 1. 技术背景 FaceBook ...
随机推荐
- FreeMarker中if标签内的判断条件
reeMarker中的<#if>标签除了里面直接判断 boolean 类型的变量外,也可以进行表达式判断,有几个细节记录一下 1. 判断对象是否存在(null) 经常会用到,如果对象 != ...
- Andriod x86 4,4
用 vbox 装了下Andriod x86 4,4 ,能用的App真心少,反正我只是用来看看安卓浏览器里网站效果,海豚浏览器还有qq浏览器x86版,还能用用,主要要换UA为iphone和ipad之类的 ...
- poj2436,poj3659,poj2430
这两题都体现了dp的核心:状态 dp做多就发现,状态一设计出来,后面的什么都迎刃而解了(当然需要优化的还要动动脑筋): 先说比较简单的: poj2436 由题得知病毒种数<=15很小,于是我们就 ...
- UVa 1637 (概率) Double Patience
题意: 一共有9堆牌,每堆牌四张.每次可以取堆顶点数相同的两张牌,如果有多种方案则选取是随机的. 如果最后将所有牌取完,则视为游戏胜利,求胜利的概率. 分析: 用一个九元组表示状态,分别代表每堆牌剩余 ...
- Entity Framework 增删改查和事务操作
1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否 ...
- Datatable转成Json方式两则
1, Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据 1.这里下载:http://www.newtonsoft.com/products/json/ ...
- uvalive 4119 Always an Interger
差分数列+字符串处理 题意:是让你判断一个整系数多项式的值是否一直都能被一个所给的正整数所整除. 通过对差分数列的不断求导,我们可以发现,对于任意多项式P,我们只需要判断n从1到k+1是否满足就行了, ...
- javascript——继承
内容: 1.继承的概念.继承分为那几种继承及各种继承的区别 2.js中有那几种继承方式及各种继承的优缺点 3.总结
- ubuntu下PHP支持cURL
公司项目需要,注册需要验证手机号码,其中需要LAMP支持cURL.由于事先安装平台的时候,并没有注意到这一点,所以编译PHP5的时候,并没有使用参数--with-curl.后来需要的时候,查一些参考方 ...
- openstack api users list get token get servers
curl -i \ -H "Content-Type: application/json" \ -d '{ "auth": { "ident ...