最近换工作 要用到webx;也看了几天的代码 ;了解了个大概;写写自己的见解。
webx 是阿里巴巴内部广泛使用的框架,是建立在java servlet api 的基础上的WEB框架。用webx搭建的应用可以运行在任何一个标准的web应用服务器上面:Tomcat,jetty,jboss,weblogic......
特点:
1:层次化
2:基于经典的MVC设计模式的WEB框架,推崇页面驱动约定胜于配置的理念
3:可以被其他的组件扩展,也可以扩展其他组件,总体上是一个集成框架,集成啦mybatis,velocity,spring等框架
vm:前端的模板页面
1:layout:页面的总体布局
2:control:页面的一些片段;如BANNER,版本信息,
3:screen:是页面的主体内容;screen中的页面的名字,package和要绑定的数据(java类)要一致;即:约定大于配置;
当在浏览器上输入的url(即页面的地址;实际上就进去啦对应的相同名字的Java类啦)
下面是webx里面渲染模板的一些配置
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被清除
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,进行内部重定向和设置错误处理页面。
#set($url = "$app1Link.setTarget('simple/download.do').addQueryData('filename', 'blob')")
<ahref="$url">$urla>