Webx学习笔记

目录

Webx的三层模型    2

Service Framework    2

PipelineService    3

MappingService    4

URIBrokerService    5

RunData常用方法    6

Turbine风格的页面布局    6

Webx如何启动spring容器的    7

Business Tier Framework    7

Webx应用的打包方法    8

Webx里面有三个比较重要的概念,action,screen,control    8

webx执行的流程    9

 

 

 

 

 

 

 

 

 

 

 

 

Webx的三层模型

1.         表现层(Presentation Tier) —— 负责和WEB用户交互、或通过Web Service和外界应用交互。这一层是外界和内部商业逻辑交流的纽带。

2.         商业逻辑层(Business Tier) —— 实现了核心的商业逻辑。通过数据访问层存取数据源中数据。

3.         数据访问层(Data Access Tier)——和底层数据源交互,存取数据。也可以和公司内部的其它系统之间通信。

Service Framework

Service Framework在系统中处于极为重要的地位。Service Framework正是为了解决Singleton/Configuration/Lifecycle这三个问题而设计的。Service Framework管理着一系统被称作Service的功能模块。Service是一个可重用、可扩展的独立模块。整个系统正是搭建在这一个个相对独立的Service的基础之上。

当Jboss容器启动时,会去加载War应用的xml文件,依次是web.xml -> webx-default.xml -> webx.xml -> biz-factory.xml -> war-biz-services.xml -> biz-manager.xml(等)

WebX是建立在Service Framework之上的,每个car都是一个独立的service容器,互不干扰,每个car的WEB-INF/webx.xml就是service配置文件

Service的生命期:

当servlet启动时(load-on-startup),所有定义在webx.xml中的services被初始化

当servlet关闭时,所有定义在webx.xml中的services被清除

PipelineService

Pipeline的工作原理

当一个HTTP请求到达的时候,Webx Framework取得特定pipeline激活它并开始执行. 一个pipeline是由一个或多个阀门(Valve)组成的,如下图所示

Valve是pipeline的主要组成部分,一个管道可以有多个Valve,每个Valve中还可以包含一个或多个Valves。

通常,pipeline会顺序触发所有的valves,但也可以让pipeline循环或选择地执行valves。

常见的value有

TryCatchFinallyValve

SetLoggingContextValve,有助于我们在Log4j日志文件中发现错误根源

SetLocaleValve,设置地域信息和字符集编码

AnalyzeURLValve,处理url映射,例如将*.htm文件转化为*.vm的target渲染模板文件

ChooseValve,类似if-else,其功能是实现分支。当when中条件满足,则执行该分支内容,否则如果有otherwise则执行之。

PerformActionValve && PerformScreenTemplateValve && PerformScreenValve

RedirectTargetValve&&SetErrorPageValve,进行内部重定向和设置错误处理页面。

例如,在consign-web这个car的webx-default.xml配置文件中,有

这个servcie随着servlet的启动被初始化,pipelineService根据consign这个car的pipeline.xml文件的阀门 进行url映射,*.htm文件转化为*.vm的target渲染模板文件。

MappingService

MappingService定义了一组映射规则,下面这个是consign项目中的mappingService的url映射规则配置

    

    

    

    

    

    

    

    

    

    

    

    

    

URIBrokerService

Consign的URL配置文件

… …

http://${consign_appServer_host}

    

/

user

    

/

pick

    

… …

在模板中使用URIBroker(代理)的方法

例如,在velocity模板中,$userModule的值为http://wuliu.daily.taobao.net/user

在程序中使用URIBroker的方法

取得URIBrokerService:

URIBrokerService uriBrokerService = (URIBrokerService)getWebxComponent().getService(URIBrokerService.SERVICE_NAME);

取得指定名称的URIBroker:

URIBroker uriBroker = uriBrokerService.getURIBroker( "petstoreLoginLink", rundata);

渲染URL:String url = uriBroker.render();

RunData常用方法

取得HTTP request、response和session à rundata.getRequest() rundata.getResponse() rundata.getSession()

取得输出流(自动buffering)à rundata.getResponse().getWriter() rundata.getResponse().getOutputStream()

取得query参数 à undata.getParameters().getString("id") rundata.getParameters().getInt("quantity")

内部重定向 à rundata.setRedirectTarget("homepage.vm")

外部重定向 à rundata.setRedirectLocation("http://www.alibaba.com/")

设置content type和character encoding à rundata.setContentType("text/html") rundata.setCharacterEncoding("UTF-8")

存取request scope的参数à rundata.getAttribute(key) rundata.setAttribute(key, object)

Turbine风格的页面布局

 

 

 

Webx如何启动spring容器的

webx初始化时,根据web.xml文件中配置

    

        org.springframework.web.context.ContextLoaderListener

    

去加载spring容器,另外在webx-default.xml文件中,配置了spring的bean工厂:

/webroot/WEB-INF/classes/biz/bean/biz-factory.xml

/webroot/WEB-INF/classes/biz/bean/uri-config.xml

Business Tier Framework

Business Tier Framework是一套基于Spring Framework ,以Use Case为中心的一套框架。它糅合了几种经典的JavaEE设计模式,使应用开发者在实现Use Case时,能够更专注于商业逻辑本身。

通过CommandDispatcher,你可以将不同的Command指派给不同的ApplicationObject来处理。通常一个Command就代表一个Use Case的请求。

Webx应用的打包方法

解决了三个问题

1.        大量内存的浪费。特别是当EAR中包含许多个WAR文件的时候。

2.        另人费解的ClassCastException异常。这是因为不同classloader所装载的类的实例是不能互换的。而不同的WAR文件却是共享同一个EAR class loader。因此在某些情况下(例如cache),一个WAR下的对象可能会跑到另一个WAR的程序中,从而导致错误。

3.        类的初始化问题。如果有一个被两个WAR所共享的类(位于EAR class loader),需要初始化。那么首先执行的WAR会抢先初始化该类,并用当前WAR的参数来初始化它。当第二个WAR被启动时,这个类的初始化状态有可能会发生错误。例如,在同一个EAR中同时运行两个使用Jakarta Turbine框架的WEB应用,就会发生这样的问题。org.apache.turbine.Turbine类会被第一个WEB应用初始化,而第二个WEB应用将失败。

Webx里面有三个比较重要的概念,action,screen,control

screen就相当于select查询,比如请求一个链接http://localhost:8080/test/get_user.vm,就会有GetUserScreen中的execute方法来获得用户信息,然后将其渲染到get_user.vm显示到页面。

示例代码:

 

action就相当于insert或update,比如注册页面,需要填写表单信息,然后点击注册按钮,请求http://localhost:8080/test/register.do,就会有UserAction中的doRegister方法来处理这些数据,插入到数据库表中。

示例代码:

webx执行的流程

当在浏览器里敲入http://wuliu.daily.taobao.net:80/user/my_test.htm时,在webx中发生了哪些事呢?

分析url

  • URL scheme:http:
  • Server name:wuliu.daily.taobao.net
  • Server port:80
  • Context path:/user
  • Servlet path:/my_test.htm
  • Target: /myTest.vm
  1. user称为context path,服务器把这个请求交给user应用来接管
  2. my_test.htm称为servlet path,在web.xml中把*.htm映射到webx controller servlet,webx controller servlet就接管了这个请求
  3. webx controller servlet激活pipeline, 继而调用AnalyzeURLValue来分析 /my_test.htm是什么意思.根据默认规则,/my_test.htm被转换成/myTest.vm
  4. 根据traget查找screen模板:/screen/user/myTest.vm模板
  5. 根据target查找screen模块的类:
    com.taobao.consign.web.module.screen.user.MyTest.java(找到该类)
    com.taobao.consign.web.module.screen.user.Default.java
    com.alibaba.turbine.module.screen.TemplateScreen(默认screen类)
  6. 执行screen类,并渲染screen模板。如果还有layout布局,则执行第7、8步
  7. 渲染在layout模板中引用的control

渲染layout模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值