Valve请求,用于控制过程的操作。它采用责任设计模式链(类别似至struts拦截器)。valve阀装置,阀控制水流量(网络请求)趋势。

他们阀门定义。

  1. public class MyValve implements Valve {
  2. public void invoke(PipelineContext pipelineContext) throws Exception {
  3. System.out.println("valve started.");
  4. pipelineContext.invokeNext(); // 调用后序 valves
  5. System.out.println("valve ended.");
  6. }
  7. }
  8.  
  9. <services:pipeline xmlns="http://www.alibaba.com/schema/services/pipeline/valves">
  10. ...
  11. <valve class="com.alibaba.myapp.pipeline.MyValve" />
  12. ...
  13. </services:pipeline>

调用一个阀。能够通过Autowired获取一个阀。

  1. @Autowired
  2. private Pipeline myPipeline;
  3. public void invokePipeline() {
  4. PipelineInvocationHandle invocation = myPipeline.newInvocation();
  5. invocation.invoke();
  6. }

一个valve能够调用另外一个Pipeline。

能够中断随意一个pipeline调用。

  1. pipelineContext.breakPipeline(0); // level=0,中断当前 pipeline
  2. pipelineContext.breakPipeline(1); // level=1,中断上一级 pipeline
  3. pipelineContext.breakPipeline("label"); // 中断到指定 label 的上级 pipeline
  4. // 以上调用相当于:
  5. pipelineContext.breakPipeline(pipelineContext.findLabel("label"));
  6. pipelineContext.breakPipeline(Pipeline.TOP_LABEL); // 终止全部 pipelines

内置valve。

loop。

  1. <loop loopCounterName="count" maxLoopCount="10">
  2. <valve />
  3. <break-if test="..." />
  4. </loop>
  5.  
  6. <while maxLoopCount="10">
  7. <conditions:condition class="..." />
  8. <valve />
  9. </while>
  10.  
  11. <if>
  12. <conditions:condition class="..." />
  13. <valve />
  14. </if>
  15.  
  16. <choose>
  17. <when test="1 == 2">
  18. <valve />
  19. </when>
  20. <when>
  21. <conditions:condition class="..." />
  22. <valve />
  23. </when>
  24. <otherwise>
  25. <valve />
  26. </otherwise>
  27. </choose>
  28.  
  29. 在循环中使用
  30. <exit />
  31.  
  32. 在循环中使用
  33. <break-if test="count &gt; 2" />
  34. <break-if toLabel="MY_LOOP">
  35. <conditions:condition class="..." />
  36. </break-if>
  37. <break-unless test="count &lt;= 2" />
  38.  
  39. <try-catch-finally>
  40. <try>
  41. <valve />
  42. </try>
  43. <catch exceptionName="myexception">
  44. <valve />
  45. </catch>
  46. <finally>
  47. <valve />
  48. </finally>
  49. </try-catch-finally>
  50.  
  51. 条件支持jexl和自己定义的condition类。
  52.  
  53. <if>
  54. <conditions:jexl-condition expr="loopCount == 2" />
  55. <break />
  56. </if>
  57.  
  58. 等价:
  59. <if test="loopCount == 2">
  60. <break />
  61. </if>
  62.  
  63. <all-of>
  64. <condition1 />
  65. <condition2 />
  66. <condition3 />
  67. </all-of>
  68.  
  69. <any-of>
  70. <condition1 />
  71. <condition2 />
  72. <condition3 />
  73. </any-of>
  74.  
  75. <none-of>
  76. <condition1 />
  77. <condition2 />
  78. <condition3 />
  79. </none-of>

以下介绍一下常见的阀门。

analyzeURL。

分析URL,作用是得到target。

它有一个homepage參数,作用是默认页面。

choose。相当于java中的switch语句。条件能够通过两种属性指定,target-extension-condition或者target-condition。以下是choose语句的样例。

  1. <choose>
  2. <when>
  3. <pl-conditions:target-extension-condition extension="null, vm, jsp" />
  4. ...
  5. </when>
  6. <when>
  7. <pl-conditions:target-extension-condition extension="do" />
  8. ...
  9. </when>
  10. <otherwise>
  11. ...
  12. </otherwise>
  13. </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详细解释的更多相关文章

  1. WebX框架的页面授权

    WebX框架的页面授权 什么是页面授权,简单来说就是对于一个Web应用程序里,哪些页面可以被哪些人在什么情况下访问进行限制.举个简单的例子,有些页面只有用户登录以后才能访问,而另外一些页面无论是否用户 ...

  2. 深入webx框架(li)

    目录 1.Webx简介 2.创建webx应用   一.Webx简介 Webx本质上就是一个Web框架,它建立在Java Servlet API基础之上.上图所示是webx的架构图.webx本身类似于s ...

  3. Webx框架自带的petstore

    Webx框架:http://openwebx.org/ petstore:webx3/webx-sample/petstore/tags/3.0/petstore 编译之后:mvn jetty:run ...

  4. Nginx location配置详细解释

    nginx location配置详细解释 语法规则: location [=|~|~*|^~] /uri/ { - } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 ur ...

  5. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  6. Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释

    我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...

  7. #pragma详细解释(一)

    #pragma详细解释 #pragma详细解释(一) 2010-04-18 14:21:00|  分类: 默认分类 |  标签: |字号大中小订阅     在#Pragma是预处理指令它的作用是设定编 ...

  8. Webx框架:Spring Schema 和 Spring Ext

    webx诞生的原因是当时市面上没有好用的web框架.如今的Web框架有非常多.然后它们背后的思想都是相似的,并且越来越趋同. Spring Schema 在传统的spring中,配置bean时须要手动 ...

  9. 关于javascript中静态成员和实例成员的详细解释

    关于javascript中静态成员和实例成员的详细解释  在我们了解什么是静态成员和实例成员之前,我们首先来了解一下什么是实例? 实例就是由构造函数创建出来的对象. 例如案例中 p 就是实例: fun ...

随机推荐

  1. 【iOS开发】 常遇到的Crash和Bug处理

    一,Unknown type name .... 如果是报这个错误,多半是你的对象类型没有被识别,检查是不是没有引用对应的库或者头文件在你的文件头部分,还有可能是循环引用导致的,循环引用的解决方法就是 ...

  2. hdu-4833-Best-Financing(DP)

    Best Financing Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. 安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题(Final Result: Installation failed with error code: (0x80070643), "安装时发生严重错误 " (Ela)

    原文:安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题(Final Result: Installation failed with error code: (0x800706 ...

  4. 第6本:《The Hunger Games》

    第6本:<The Hunger Games> 以前从未读过一本完整的英文小说,所有就在今年的读书目标中增加了一本英文小说,但在 头四个月内一直没有下定决定读哪一本.一次偶然从SUN的QQ空 ...

  5. hdu3974(线段树+dfs)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3974 题意:给定点的上下级关系,规定如果给i分配任务a,那么他的所有下属.都停下手上的工作,开始做a. ...

  6. openstack学习笔记一 虚拟机启动过程代码跟踪

    openstack学习笔记一 虚拟机启动过程代码跟踪 本文主要通过对虚拟机创建过程的代码跟踪.观察虚拟机启动任务状态的变化,来透彻理解openstack各组件之间的作用过程. 当从horizon界面发 ...

  7. 关于SVN配置文件的一个小例子

    1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于工作日志,原先采用邮件方式发给经理,但是这种方式 ...

  8. STM32串口乱码

    库函数默认8MHz晶振,应根据实际硬件选择 # CMSIS/stm32f10x.h #define HSE_VALUE ((uint32_t)12000000) #if !defined HSE_VA ...

  9. uva:10700 - Camel trading(贪婪)

    题目:10700 - Camel trading 题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围[1,20].这些表达式可能缺少了括号,问这种表达式加上括号后能得到的最大值和最小值. ...

  10. 元素z-index继承问题

    两同层元素.当中一个的子元素定位与还有一个重叠时,该子元素被覆盖(此时子元素的z-index继承的是其父元素的z-index,不管其z-index多少均被覆盖) <html> <he ...