Webx框架:Pipeline简介

Pipeline。它的含义就是管道,一个管道可以安装很多的阀门,可以有很多分支。它用于控制页面的处理流程。它需要定义在pipeline.xml文件中,该文件中的每个标签都是一个阀门。该文件中可以放一些简单的控制语句。在项目中,下面这样的管道配置就已经够用了。


<services:pipeline xmlns="http://www.alibaba.com/schema/services/pipeline/valves">
  <!-- 初始化 turbine rundata,并在 pipelineContext 中设置可能会用到的对象(如rundata、utils),以便 valve 取得。 -->
  <prepareForTurbine />
  
  <!-- 设置日志系统的上下文,支持把当前请求的详情打印在日志中。 -->
  <setLoggingContext />
  
  <!-- 分析URL,取得target。 -->
  <analyzeURL homepage="homepage" />
  
  <!-- 检查 csrf token,防止 csrf 攻击和重复提交。假如 request 和 session 中的 token 不匹配,则出错,或显示 expired 页面。 -->
  <checkCsrfToken />

  <!-- 这里为什么要用循环呢? -->
  <loop>
    <choose>
      <when>
        <!-- 执行带模板的screen,默认有layout。 -->
        <pl-conditions:target-extension-condition extension="null, vm, jsp" />
        <performAction />
        <performTemplateScreen />
        <renderTemplate />
      </when>
      <when>
        <!-- 执行不带模板的screen,默认无layout。 -->
        <pl-conditions:target-extension-condition extension="do" />
        <performAction />
        <performScreen />
      </when>
      <otherwise>
        <!-- 将控制交还给 servlet engine。 -->
        <exit />
      </otherwise>
    </choose>
    
    <!-- 假如 rundata.setRedirectTarget() 被设置,则循环,否则退出循环。 -->
    <breakUnlessTargetRedirected />
  </loop>
</services:pipeline>


为什么要引入Pipeline?这是因为传统的Filter受到限制,只能访问或者修改HttpServletRequest、HttpServletResponse、ServletContext三个对象,不能访问应用程序中的状态。流程控制过于简单,只能继续执行或者终止执行,没有循环、分支等机制。还有Filter无法访问其他Filter的状态,在性能优化的时候比较困难。


为了克服Filter的缺点,Webx引入了RequestContext和Pipeline。其中RequestContext负责访问和修改request和response对象,而Pipeline负责控制请求的执行流程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值