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负责控制请求的执行流程。

时间: 2024-12-19 14:50:49

Webx框架:Pipeline简介的相关文章

Webx框架:Spring Schema 和 Spring Ext

webx诞生的原因是当时市面上没有好用的web框架.现在的Web框架有很多,然后它们背后的思想都是相似的,而且越来越趋同. Spring Schema 在传统的spring中,配置bean时需要手动去指定具体的实现类是什么,参数有哪些.这样开发者需要记住具体的实现类.参数名称.含义等,会带来很大的记忆负担.为了解决这个问题,SpringSchema出现了.它的解决办法是将所有的参数转换成标签.标签是可以通过XML Schema定义的.这样只需要记忆标签的名字即可.标签的名称一般都很短,因此减轻了

Webx框架自带的petstore

Webx框架:http://openwebx.org/ petstore:webx3/webx-sample/petstore/tags/3.0/petstore 编译之后:mvn jetty:run即可, 访问:http://localhost:8081/ Webx MVC(以webx3为基础) 1.webx3的入口点 <filter> <filter-name>webx</filter-name> <filter-class>com.alibaba.ci

Webx框架:RequestContext详解

RequestContext RequestContext可以看成request和response的合体.多个RequestContext还可以串起来,就像Filter链条一样.每个外层RequestContext都会在内层RequestContext的基础上增加功能.在设计模式中这叫装饰器. RequestContext种类有basic/buffered/lazy-commit/parser/rewrite/session/set-locale功能.后面还会具体介绍. 下面是配置方法: <se

Webx框架:会话管理

在Servlet中,Session和Cookie是分开的.Session一般保存在内存中,当然也可以保存在数据库等其他地方.如果保存在内存中,对于服务集群来说就需要解决Session共享的问题.如果保存在数据库,就存在单点故障.性能差等问题. webx提供了会话框架,将session这样复杂的问题统一进行解决.在webx框架中,主张将cookie合并到session中,再通过规则,路由到cookie或者session中.cookie保存在客户端,session保存在服务端,它们的区别这里就不赘述

我的WebX框架学习总结与心得分享

最近学习了webx框架, 利用博客园跟大家分享一下自己的学习心得; 周建旭 2014-08-21 网上关于webx的资料少的可怜, 怎么办?  这种情况下不用去求助别人求人只会耽误时间, 不用畏惧; 看文档写demo 就ok了; API是最好的资料, webx官方有个pdf的中文文档提供下载, 建议在学webx之前, 先整体浏览一遍文档以便于把握webx框架的大体脉络, 第一遍看的过程不必钻牛角尖 ; 然后结合淘宝官方Michael Zhou的Petstore(宠物商店)例子对比一下文档(那块不

【转】Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

流式计算框架-STORM简介

在当前的数据分析领域,对实时数据的计算需求越来越强烈,在此领域,出现了各类计算框架,如:Storm.S4等.目前本土公司对这些流式计算框架的应用也比较广泛,但苦于相关文档英文居多,缺少成系列且与官方相对应的中文手册.本系列试图从官方文档翻译入手,给大家呈现较为完备的中文资料,同时也是对自身知识的总结沉淀. 在这个系列博客中,我们选择了twitter的Storm框架,原因很简单,因为本人长期使用的就是该框架,咱们先从简介开始. Apache Storm是一个免费.开源.分布式的实时计算系统.相对于

hadoop备战:yarn框架的简介(mapreduce2)

新 Hadoop Yarn 框架原理及运作机制 重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控.新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调.一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务.ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织.

Webx框架:Pipeline基本介绍

Pipeline. 它是管道的含义.一个管道阀门可以安装非常多.有许多可能的分支.它是用来控制页处理.它需要在被定义pipeline.xml文件.该文件是为每个阀的标签.该文件可以放一些简单的控制语句.在项目.这条管线有以下配置足够好. <services:pipeline xmlns="http://www.alibaba.com/schema/services/pipeline/valves"> <!-- 初始化 turbine rundata,并在 pipeli