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 ...
随机推荐
- uva :10123 - No Tipping(dfs + 几何力矩 )
option=com_onlinejudge&Itemid=8&page=show_problem&category=109&problem=1064&mosm ...
- libsvm中的dec_values以及分类结果评分问题
最近一个图像识别项目里需要对分类的结果进行打分,因为使用的是libsvm3.12,一开始决定直接将svm_predict_values函数的dec_values作为评分返回,后来研究了之后才觉得里面有 ...
- NET工厂模式架构
NET工厂模式架构 最近项目的架构需要做调整优化,根据业务需要写了一个简单的工厂模式架构 项目介绍:整个系统分为三大平台(这里用A,B,C来标示),每个平台又细分为多个APP客户端(每个APP都有ap ...
- NEU月赛Segment Balls(线段树)
问题 D: Segment Balls 时间限制: 1 Sec 内存限制: 128 MB 提交: 253 解决: 37 题目描述 Small K has recently earn money i ...
- hdu3853(概率dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 题意:有一个人被困在一个 R*C(2<=R,C<=1000) 的迷宫中,起初他在 ( ...
- linux的tr命令
tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换. 语法 tr [ -c | -cds | -cs | -C | -Cds | -Cs | -ds | -s] [ -A] S ...
- 关于IE打印预览内容显示不全的问题解决
眼下在调整一个页面打印功能的时候,发现多行文本框TextArea在页面显示的时候,多行文本能够正常显示,可是在打印页面的时候.部分内容就被遮挡住了, 苦思冥想不得其解,后来还是请教了美工. 首先查了下 ...
- java的提取与替换操作
public class Demo02 { public static void main(String args[]){ String str = "java 技术学习班 2007032 ...
- 开启本地MySql数据库远程连接
解决MySQL不允许从远程访问的方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 33 ...
- 日版 Galaxy Note sc05d 涮机
问题描写叙述:手机已坏.进不了系统 以下提供线涮刷机教程: 1.首先拔掉你的sd卡和sim卡.双清你的手机.可能有些版本号的机油没有双清模式,那就进到设置里边恢复出厂设置,然后关掉你的手机再开机.等到 ...