Webx3.0学习笔记(三):Webx执行流程

本文介绍了Webx3.0的页面结构,包括layout、screen和control,并详细阐述了Webx的执行流程,从URL分析、选择流程、执行action、查找并执行screen、渲染模板到内部重定向,揭示了Webx如何处理用户请求的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

webx的页面结构

webx页面由三部分组成:

  1. layout 对应着templetas文件夹里的layout文件夹,负责页面的布局。
  2. screen 对应着templates文件夹里的screen文件夹,是页面的主体内容。
  3. control 对应着templates文件夹里的control文件夹,是页面的通用部分,可以被多个screen或layout引用,例如页面导航、页脚等
每个页面有一个layout,每个layout只能有一个screen,每个layout或screen可以有多个control。


webx执行流程

webx的执行流程是由pipeline控制的,所以流程的定义就在pipeline配置中,下面是推荐的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>

可以看出webx根据target来判断执行哪一个流程。如果后缀为空或为vm、jsp时,则执行第一个流程,如果后缀是do则执行第二个流程。


如果用户输入一个地址http://localhost:8080的话,webx的执行流程如下:

1、<anaylzeURL>分析url,取得target

由于http://localhost:8080并不包含context path,所以分析得到的target为null,在这种情况下target会取默认值homepage,target并不是模板也不是类,只是一个抽象概念,在后面的步骤中会根据target映射到模板和module类。

2、<choose>分支

根据取得的target可以确定,符合条件extension="null,vm,asp",webs会执行这一流程

3、<performAction>执行action

webx里的action专门用来处理用户提交的表单,由于本次请求没有action参数,所以忽略了这一步骤

4、<performTemplateScreen>查找并执行screen

在这一步,会把target映射成screen的module类,映射的规则如下:如果target是xxx/yyy/zzz,那么webs会按照以下的顺序来screen模块:

screen.xxx.yyy.zzz

screen.xxx.yyy.Default

screen.xxx.Default

screen.Default

本次请求的target是homepage,所以会查找screen.homepage和screen.default两个模块类,如果找到就执行,如果找不到也没关系。

5、<renderTemplates>渲染模板

这一步又分两部分:将target映射成screen模板、将target映射成layout模板

假设target是xxx/yyy/zzz,则webs会查找screen模板/templetes/screen/xxx/yyy/zzz,如果没找到就会报404错误。找到screen模板后,webs会按以下顺序查找layout模板:

/templates/layout/xxx/yyy/zzz

/templates/layout/xxx/yyy/default

/templates/layout/xxx/default

/templates/layout/default

如果没找到layout模板,则直接渲染screen模板,如果找到了layout模板,则将渲染的screen模板嵌入到layout模板中。

6、<breakunlessTargetRedirect>内部重定向

如果设置了内部重定向,则模板渲染完成后会循环loop标签,如果没有定义重定向,则执行完成,退出循环。

至此,一个webx请求的执行流程完成了~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值