Webx学习(一)

什么是webx

Webx3_Guide_Book中是这样介绍的:

Webx是一套基于Java Servlet API的通用Web框架。

Webx致力于提供一套极具扩展性的机制。来满足Web应用不断变化和发展的需求。而SpringExt正是这样的扩展性的基石。SpringExt扩展了Spring,在Spring的基础上提供了一种扩展功能的新方法。

这也说明。webx是在springExt的基础上建立起来的一套web服务框架。

它封装了servlet规则。细化了普通情况下的filter,通过配置文件pipeline.xml和强化过的RequestContexts,将一个请求的路径和处理过程展现。有关这两个是什么和它们的用法后面再说。

该框架不但定义了请求分发机制,更对前端的页面展示层进行模板式的定义:使用default.vm、index.vm、register.vm等类型的自己定义模板与analyzeURL机制进行交互。形成从前端到后台的“总体一条龙”的流程。

在Webx中。约定胜于配置。规则较多,但我相信理解之后便能够自由运用(我们学习不论什么东西都要先了解它的规则。这是必定的一步)。

Webx的必备组件

  • spring核心框架
  • webx框架依赖(com.alibaba.citrus)当中包括了重要的WebxContextLoaderListenerLogConfiguratorListener
  • pipeline及映射规范
  • 模板规范
  • 配置项

spring核心框架

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-version}</version>
        </dependency>

$spring-version可在标签中可通过<spring-version></spring-version>配置。

webx框架依赖

<dependency>
    <groupId>com.alibaba.citrus</groupId>
    <artifactId>citrus-webx-all</artifactId>
    <version>${webx-version}</version>
</dependency>

代碼包名規則

通过pipeline的analysisURL模块解析出target之后,会依据pipline-velves制定的规则分发。

这时。须要知道什么样的target会相应到什么样的流程中去,这个相应过程的识别,是依据包名的约定来定义的。也即是约定大于配置的一个体现。

对于包名的配置项在webx.xml和webx-*.xml中定义。

<!-- 装载模块。 -->
<services:module-loader>
    <ml-factories:class-modules>
        <search-packages type="$1"
            packages="todolist.module.*" />
    </ml-factories:class-modules>
</services:module-loader>

packages所指的就是用于匹配相应规则的包,$1直接匹配到screen.xxx.java或action.xxx.java等等。

而在pipeline.xml中制定映射规则包括:

<pl-valves:performAction />

performAction:在webx中主要是用来处理提交的表单,将表单类传给java类。运行相应的处理方法,然后返回或者重定向。

<pl-valves:performTemplateScreen />

performTemplateScreen:将target映射成module包下的screen.xxx类。

详见附件的第四章WebxTurbine。

<pl-valves:renderTemplate />

rendertemplate:将target映射到webroot下的各个模板上。

注:这是映射的不是类,而是模板了,也就是带着数据等開始渲染模板。

详见第四章WebxTurbine。

这里可能会有一个误区。依据我的使用历程,发现performAction、performtemplateScreen和renderTemplate这三个基本方法,凡是perform开头的都是映射到java类的。

我開始的时候会觉得performTemplateScreen是直接映射到app/templates/screen中的模板去,后来才发现这个问题。

仅仅有render相关的才是渲染模板。一般使用renderTemplate的应该是运行完perform*之后或者是首页——直接渲染模板。

pipeline

Pipeline不仅能够控制流程的中断或继续。还能够实现子流程、循环、条件转移、异常处理等更精细的流程控制。Pipeline服务甚至能够运用在非WEB的环境中。

上述包名规则的定制就是为了pipeline服务中使用perform*和 renderTemplate等等去使用的。

模板规范

正如上述所说,在renderTemplate的时候就须要用到模板的规范了,他能够使得类中处理得到的数据和模板相应起来。

模板文件夹有这几个要素:

webroot下以应用名为子文件夹(如app)

  • webroot/common
  • webroot/app
  • webroot/WEB-INF

当中重点讲app下模板,common的与app大体一致。

  • app/templates/layout
  • app/templates/screen

screen下能够自己定义文件夹,该自己定义文件夹在使用外部重定向的时候须要跟设置的setTarget()相符。

如:screen/form/register.vm

则nav.redirectedTo(“appLink”).setTarget(“form/register”)即锁定到了该register.vm。

在renderTemplate时,先渲染screen中的内容,然后出来寻找layout。终于将组装好的整个页面呈现。

详见附件第四章WebTurbine——renderTemplate。

配置项

上述几项已经基本将pipeline.xml的主要部分做了说明。

以下看一些固有的配置项和自己定义(app)配置项。

WEB-INF下

  • web.xml
  • webx.xml
  • webx-*.xml
  • logback.xml

WEB-INF/common下

  • pipeline.xml
  • pipeline-execption.xml
  • resource.xml
  • uris.xml
  • webx-component.xml
  • webx-component-and-root.xml

WEB-INF/app下

- form.xml

下一节的主要任务是弄清楚这些配置和之间的关系。

附:

之前讲到了pipeline和requestContext将传统的filter细分为两个比較独立的职能。以下是对webx中requestContext的简介。

RequestContexts则负责訪问和改动request和response,但不负责改变requese的运行流程。

RequestContexts服务中的每个环节的RequestContext之间并不是全然独立、互不干涉的。每个request context能够訪问它所依赖的其他request context中的状态。

详见附件第六章——Filter、Request Contexts和Pipeline。

附件:Webx3GuideBook

时间: 2024-10-17 18:37:09

Webx学习(一)的相关文章

webx学习笔记

Webx学习笔记周建旭 2014-08-01 Webx工作流程 图 3.2. Webx Framework如何响应请求 当Webx Framework接收到一个来自WEB的请求以后,实际上它主要做了两件事: 1. 首先,它会增强request.response.session的功能,并把它们打包成更易使用 的RequestContext对象. #macro (registerMessage $field) #if (!$field.valid) $field.message #end #end

webx学习

webx学习(一)——初识webx webx学习(二)——Webx Framework webx学习总结(一)——使用webx框架实现简单的登录功能 webx学习(三)——Webx Turbine webx学习(四)——ResourceLoadingService webx学习(五)——webx页面布局相关 webx学习(六)——Request Contexts webx学习(七)Pipeline服务 webx学习(八)Request Contexts详解 webx学习总结(二)——使用webx

Webx学习之一

什么是webx Webx3_Guide_Book中是这样介绍的: Webx是一套基于Java Servlet API的通用Web框架.Webx致力于提供一套极具扩展性的机制,来满足Web应用不断变化和发展的需求.而SpringExt正是这种扩展性的基石.SpringExt扩展了Spring,在Spring的基础上提供了一种扩展功能的新方法. 这也说明,webx是在springExt的基础上建立起来的一套web服务框架. 它封装了servlet规则,细化了一般情况下的filter,通过配置文件pi

Webx学习笔记(八)Request Context之Session

1 Session概述 HTTP协议是无状态的,但通过session机制,就能把无状态的变成有状态的.Session的功能就是保存HTTP请求之间的状态数据.有了session的支持,就很容易实现诸如用户登录.购物车等网站功能.在Servlet API中,有一个HttpSession的接口. 在Java代码中访问session //在一个请求中,保存session的状态 // 取得session对象 HttpSession session = request.getSession(); // 在

WebX学习二——URL请求流程分析

URL请求流程分析 1.在index页面中设置了 得到如下链接 当这个get请求发出的时候,流程是这样的: 首先,它被webx中配置的Filter捕获: 进入源码分析发现:该请求进入了WebxFrameworkFilter的doFilter方法: @Override protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOExcept

Webx学习笔记(六)Pipeline服务

1. Pipeline工作原理 Pipeline的意思是管道,管道中有许多阀门(Valve),阀门可以控制水流的走向.在Webx中,pipeline的作用就是控制应用程序流程的走向. 图 6.4. Pipeline和Valves Pipeline的设计和filter非常相似,也是击鼓传花式的流程控制.但是有几点不同: Pipeline只能控制流程,不能改变request和response. Pipeline是轻量级组件,它甚至不依赖于WEB环境.Pipeline既可以在程序中直接装配,也可以由s

Webx学习笔记(四)Webx Turbine

Webx Turbine建立在Webx Framework的基础上,实现了页面渲染.布局.数据验证.数据提交等一系列工作.Webx Turbine所遵循下面的设计理念包括:页面驱动约定胜于配置 页面布局: Screen,代表页面的主体.Layout,代表页面的布局.Control,代表嵌在screen和layout中的页面片段 1.webx设计理念: 页面驱动:         在程序员介入以前,让界面设计师可以直接创建模板,并展示模板的效果.页面驱动的反面,是程序驱动,或者是Action驱动

Webx学习笔记(三)Webx Framework

Webx Framework的任务 系统初始化 响应请求 初始化Spring容器 增强request/response/session的功能 初始化日志系统 提供pipeline流程处理机制   异常处理   开发模式 1 Webx的初始化 //初始化Spring容器 - /WEB-INF/web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4"

webx--借用petstore快速入门,webx--petstore

配置对应环境,运行petstore 通过官网给的命令行方法,来运行petstore petstore是java ee的经典学习案例,下载链接 如何运行呢? 参见官网给的指导:webx官网 git clone https://github.com/webx/citrus-sample.git cd citrus-sample/petstore mvn clean install cd web mvn jetty:run-war maven是一个巨大项目的管理工具,类似于C++的makefile,回