Webx框架:Valve详细解释
Valve请求,用于控制过程的操作。它采用责任设计模式链(类别似至struts拦截器)。valve阀装置,阀控制水流量(网络请求)趋势。
他们阀门定义。
public class MyValve implements Valve {
public void invoke(PipelineContext pipelineContext) throws Exception {
System.out.println("valve started.");
pipelineContext.invokeNext(); // 调用后序 valves
System.out.println("valve ended.");
}
}
<services:pipeline xmlns="http://www.alibaba.com/schema/services/pipeline/valves">
...
<valve class="com.alibaba.myapp.pipeline.MyValve" />
...
</services:pipeline>
调用一个阀。能够通过Autowired获取一个阀。
@Autowired
private Pipeline myPipeline;
public void invokePipeline() {
PipelineInvocationHandle invocation = myPipeline.newInvocation();
invocation.invoke();
}
一个valve能够调用另外一个Pipeline。
能够中断随意一个pipeline调用。
pipelineContext.breakPipeline(0); // level=0,中断当前 pipeline
pipelineContext.breakPipeline(1); // level=1,中断上一级 pipeline
pipelineContext.breakPipeline("label"); // 中断到指定 label 的上级 pipeline
// 以上调用相当于:
pipelineContext.breakPipeline(pipelineContext.findLabel("label"));
pipelineContext.breakPipeline(Pipeline.TOP_LABEL); // 终止全部 pipelines
内置valve。
loop。
<loop loopCounterName="count" maxLoopCount="10">
<valve />
<break-if test="..." />
</loop> <while maxLoopCount="10">
<conditions:condition class="..." />
<valve />
</while> <if>
<conditions:condition class="..." />
<valve />
</if> <choose>
<when test="1 == 2">
<valve />
</when>
<when>
<conditions:condition class="..." />
<valve />
</when>
<otherwise>
<valve />
</otherwise>
</choose> 在循环中使用
<exit /> 在循环中使用
<break-if test="count > 2" />
<break-if toLabel="MY_LOOP">
<conditions:condition class="..." />
</break-if>
<break-unless test="count <= 2" /> <try-catch-finally>
<try>
<valve />
</try>
<catch exceptionName="myexception">
<valve />
</catch>
<finally>
<valve />
</finally>
</try-catch-finally> 条件支持jexl和自己定义的condition类。 <if>
<conditions:jexl-condition expr="loopCount == 2" />
<break />
</if> 等价:
<if test="loopCount == 2">
<break />
</if> <all-of>
<condition1 />
<condition2 />
<condition3 />
</all-of> <any-of>
<condition1 />
<condition2 />
<condition3 />
</any-of> <none-of>
<condition1 />
<condition2 />
<condition3 />
</none-of>
以下介绍一下常见的阀门。
analyzeURL。
分析URL,作用是得到target。
它有一个homepage參数,作用是默认页面。
choose。相当于java中的switch语句。条件能够通过两种属性指定,target-extension-condition或者target-condition。以下是choose语句的样例。
<choose>
<when>
<pl-conditions:target-extension-condition extension="null, vm, jsp" />
...
</when>
<when>
<pl-conditions:target-extension-condition extension="do" />
...
</when>
<otherwise>
...
</otherwise>
</choose>
performAction。运行Action来处理表单。
webx中的Action和其它框架中的不一样。这里仅仅处理表单。其它的框架中可能还会在Action中渲染页面。
performTemplateScreen。它的作用是查找相应的Screen代码,并运行。假设target为xxx/yyy/zzz那么框架会依次寻找screen.xxx.yyy.Zzz、screen.xxx.yyy.Default、screen.xxx.Default、screen.Default。并调用它的execute(Context,HttpServletRequest)方法。在哪里寻找这些类呢?能够在webx.xml中的module-loader/search-packages中指定根包。
renderTemplate。渲染模板。假设target是xxx/yyy/zzz那么框架会依次尝试寻找/templates/screen/xxx/yyy/zzz、/templates/screen/xxx/yyy/default、/templates/screen/xxx/default、/templates/screen/default。假设没有找到模板,会报404的错误。找到screen模板以后,框架还会尝试寻找layout:/templates/layout/xxx/yyy/zzz、/templates/layout/xxx/yyy/default等。
breakUnlessTargetRedirected。在对循环条件。假设有内部发生重定向,所以圈外。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Webx框架:Valve详细解释的更多相关文章
- WebX框架的页面授权
WebX框架的页面授权 什么是页面授权,简单来说就是对于一个Web应用程序里,哪些页面可以被哪些人在什么情况下访问进行限制.举个简单的例子,有些页面只有用户登录以后才能访问,而另外一些页面无论是否用户 ...
- 深入webx框架(li)
目录 1.Webx简介 2.创建webx应用 一.Webx简介 Webx本质上就是一个Web框架,它建立在Java Servlet API基础之上.上图所示是webx的架构图.webx本身类似于s ...
- Webx框架自带的petstore
Webx框架:http://openwebx.org/ petstore:webx3/webx-sample/petstore/tags/3.0/petstore 编译之后:mvn jetty:run ...
- Nginx location配置详细解释
nginx location配置详细解释 语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 ur ...
- Spring中IOC和AOP的详细解释(转)
原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...
- Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...
- #pragma详细解释(一)
#pragma详细解释 #pragma详细解释(一) 2010-04-18 14:21:00| 分类: 默认分类 | 标签: |字号大中小订阅 在#Pragma是预处理指令它的作用是设定编 ...
- Webx框架:Spring Schema 和 Spring Ext
webx诞生的原因是当时市面上没有好用的web框架.如今的Web框架有非常多.然后它们背后的思想都是相似的,并且越来越趋同. Spring Schema 在传统的spring中,配置bean时须要手动 ...
- 关于javascript中静态成员和实例成员的详细解释
关于javascript中静态成员和实例成员的详细解释 在我们了解什么是静态成员和实例成员之前,我们首先来了解一下什么是实例? 实例就是由构造函数创建出来的对象. 例如案例中 p 就是实例: fun ...
随机推荐
- 【Android每周专题】触摸屏事件
本系列文章均为A2BGeek原创,转载务必在明显处注明: 转载自A2BGeek的[Android每周专题]系列,原文链接:http://blog.csdn.net/benbmw2008/article ...
- Semaphore实现Andoird版源代码剖析
Semaphore是一个计数的信号量.从概念上来说,信号量维持一组许可(permits).acquire方法在必须的时候都会堵塞直到有一个许可可用,然后就会拿走这个许可.release方法加入一个许可 ...
- VS上的WebService入门贴
由于项目需要,最近要熟悉一下通过IIS发布WebService.首先熟悉一下使用VS来创建webservice并且调用它. //------------------------------------ ...
- Jedis Client的使用以及序列化
JedisPool pool = new JedisPool(poolConfig, IP, PORT, timeout); public String set(String key,String v ...
- MongoDB 基础命令——数据库表的增删改查——遍历操作表中的记录
分组排序查询最大记录 //对 "catagory" 不等于 null 的数据进行分组查询,且查询结果倒序 db.getCollection('userAccount').aggre ...
- 程序员的视角:java 线程(转)
在我们开始谈线程之前,不得不提下进程.无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解. 进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小.卧室数量等. ...
- DirectX11 学习笔记9 - 动态顶点缓冲区 和 静态顶点缓冲区
首先,什么是缓冲区: 缓冲区是.fx文件的影响(.ps .vs还) 一种数据结构,其定义了.为.fx和cpp数据通信文件. 例: //--------------------------------- ...
- 《JavaScript设计模式与开发实践》读书笔记之代理模式
1.代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问 1.1 一般的图片加载 var myImage=(function () { var imgNode=document.c ...
- android4.0 USB Camera示例(五个辅助)jpg压缩
前的最后一个 我们说,一个直接yuv变成jpg该功能 但是转换不成功 主要功能是yuv420转jpg的 根据研究发现 yuv420的序列是这种 YYYY YYYY UVUV 而yuv422的隔行扫描的 ...
- ECSHOP如何增加红包序列号字符
ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字.如果当我们要发放大额度红包的时候,这样的序列号规 则难免给人不安全的感觉,万一有无聊的人,蒙几个红包序列号出来 ...