`
安铁辉
  • 浏览: 244857 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

webx之pipeline

    博客分类:
  • WEB
阅读更多
处理页面的基本流程
Webx Turbine的处理流程被定义在pipeline中。Webx Framework没有规定Pipeline的内容,但Webx Turbine却定义了一系列valves。下面是一个Webx Turbine推荐的pipeline配置:

<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>
假设用户以URL: http://localhost:8081/来访问Webx应用。域名和端口不重要,取决于应用服务器的配置,这里假设为localhost:8081。Webx Framework的处理流程,从WebxFrameworkFilter接收请求,并且一路顺利到达pipeline。然后Pipeline开始依次执行它的valves。(下面的描述略过一些相对次要的步骤。)


<analyzeURL> - 分析URL。

分析URL的目的是取得target。由于用户访问的URL中并没有提供path信息,通常被理解为:用户想要访问“主页”。AnalyzeURL valve提供了一个可选的参数“homepage”,即是在这种情况下起作用 ——

http://localhost:8081/对应的target为“homepage”。

需要注意的是,target不代表模板名,也不代表类名。Target只是一个抽象的概念 —— 当前页面需要达成的目标。Target可能被后续的valves解释成模板名、类名或者其它东西。

进入<choose> - 多重分支。
很明显,“homepage”满足了第一个<when>所附带的条件:<target-extension-condition extension="null, vm, jsp">,意思是target的后缀不存在(null)或为“jsp”或为“vm”。

<performAction> - 执行action。
和其它框架中的action概念不同,在Webx Turbine中,action是用来处理用户提交的表单的。

因为本次请求未提供action参数,所以跳过该步骤。

<performTemplateScreen> - 查找并执行screen。

这里要用到一个规则:target映射成screen module类名的规则。

假设target为xxx/yyy/zzz,那么Webx Turbine会依次查找下面的screen模块:

√ screen.xxx.yyy.Zzz,


√ screen.xxx.yyy.Default,


√ screen.xxx.Default,


√ screen.Default。

本次请求的target为homepage,因此它会尝试查找screen.Homepage和screen.Default这两个类。

如果找到screen类,Webx Turbine就会执行它。Screen类的功能,通常是读取数据库,然后把模板所需要的对象放到context中。

如果找不到,也没关系 —— 这就是“页面优先”:像homepage这样的主页,通常没有业务逻辑,因此不需要screen类,只需要有模板就可以了。

<renderTemplate> - 渲染模板。
这里用到两个规则:target映射成screen template,以及target映射成layout template。

假设target为xxx/yyy/zzz,那么Webx Turbine会查找下面的screen模板:/templates/screen/xxx/yyy/zzz。Screen模板如果未找到,就会报404 Not Found错误。

找到screen模板以后,Webx Turbine还会试着查找下面的layout模板:

√ /templates/layout/xxx/yyy/zzz

√ /templates/layout/xxx/yyy/default

√ /templates/layout/xxx/default

√ /templates/layout/default

Layout模板如果找不到,就直接渲染screen模板;如果存在,则把渲染screen模板后的结果,嵌入到layout模板中。

Layout模板和screen模板中,都可以调用control。每个页面只有一个screen,却可以有任意多个controls。

<breakUnlessTargetRedirected> - 内部重定向。
在screen和action中,可以进行“内部重定向”。内部重定向实质上就是由<breakUnlessTargetRedirected>实施的 —— 如果没有重定向标记,就退出;否则循环到<loop>标签。

和外部重定向不同,外部重定向是向浏览器返回一个302或303 response,其中包含Location header,浏览器看到这样的response以后,就会发出第二个请求。而内部重定向发生在pipeline内部,浏览器并不了解内部重定向。
分享到:
评论

相关推荐

    webx3文档——web开发

    Webx的响应请求机制通过增强request、response、session的功能,并采用Pipeline流程机制来处理请求。异常处理机制和开发模式工具也被设计进去,以便更好地控制和处理请求过程中的异常和调试。 Webx的定制主要通过对...

    webx框架指南

    Webx的设计理念建立在层次化架构之上,提倡页面驱动、约定优于配置等设计原则。它的出现为Java开发者提供了一个可以替代传统Spring开发模式的新选择,特别是对于需要构建高效、可扩展Web应用的开发者。 在Webx框架...

    webx_guide

    在Webx Framework之上,Webx Turbine作为一个页面处理层,采用了页面驱动的设计理念,这意味着Webx Turbine重视页面生成和页面流程的管理。页面布局和处理页面的基本流程是Webx Turbine的主要功能。Webx还支持依赖...

    Webx介绍_PDF

    - **执行流程**:请求处理过程通过Pipeline来管理,包括URI解析、请求上下文处理等多个环节,确保了请求的高效处理。 ### 总结 Webx3.0框架在继承了Webx2的优势基础上,进一步加强了与Spring框架的整合,引入了许多...

    webx3 PDF(阿里巴巴 前端web框架)

    ### Webx3 PDF(阿里巴巴前端Web框架):深入解析与技术要点 #### 引言 Webx是一款由阿里巴巴推出的前端Web框架,旨在提供一个高效、灵活且可扩展的基础架构来支持大规模Web应用的开发。本文章将从Webx框架的核心...

    Webx3_Guide_Book.pdf

    Webx框架在设计理念上与当时流行的其他开源框架有所不同,它更加强调成熟可靠性和开放扩展性,这是Webx框架的主要优势之一。 Webx框架的一个重要优势是成熟可靠性。这得益于Webx框架背后的深厚技术积累和严格的设计...

    WEBX3.0框架指南(PDF版)

    - **基础框架**:WEBX3.0的基础构建于Spring框架之上,通过提供一系列扩展点来实现高度定制化的开发。 - **层次化**:框架被划分为多个层次,每个层次负责不同的功能模块,这种设计使得开发者可以按需选择使用哪些...

    淘宝框架 Webx3资料

    - **发展历程**:Webx3框架自发布以来经历了多个版本的迭代与优化,逐渐成为阿里巴巴内部以及外部开发者青睐的技术栈之一。其最新版本(Webx3)不仅继承了前代的优点,还在功能性和易用性方面做了进一步的增强。 ##...

    Webx3 Guide Book pdf

    **Filter、RequestContexts和Pipeline**是Webx框架中的关键概念之一。 ##### **6.1 Filter** - **Filter的用途**:Filter用于拦截请求并执行特定的逻辑。 - **Filter工作原理**:在请求到达控制器之前,Filter可以...

    webx3框架指南PDF教程附学习Demo

    完全建立在Spring框架之上,故可运用Spring的所有特性。 • 扩展性 —— Webx 3.0对Spring做了扩展,使Spring Bean不再是“bean”,而是升级成“组件”。一个组件可以扩展另一个组件,也可以被其它组件扩展。这种...

    Web页面分层交叉实验.pdf

    Web服务器配置拦截器,如通过web.xml的filter或webx的pipeline,拦截流量并交由客户端公共库的分流器组件处理。分流器给流量分配相应的参数值,并使用ThreadLocal保持这些值。实验信息的埋点是另一个重要环节,需要...

Global site tag (gtag.js) - Google Analytics